目的:記錄使用SpringMVC中前端JSON數據中的日期轉換成Date數據類型時區產生的問題
記錄下遇到過的問題
在使用SpringMVC框架中,使用@RequestBody注解將前端的json數據轉換為對應的bean,使用@ResponseBody將bean轉換為json(注意:開啟該controller層的包掃描)同時使用@JsonFormat,但是沒有指定時區,所以導致json中的日期轉換成Date類型時,因為時區導致時間不一致。
使用MySQL數據庫,同時沒有指定時區導致插入數據庫時存在時區問題。
// VO
public class FooVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private Date dt;
}
// controller
@Controller
public class FooController {
@ResponseBody
@RequestMapping(value = "/save", method = RequestMethod.POST, consumes = "application/json")
public ResponseEntity<?> save(@RequestBody FooVO foo) {
// {"dt":"yyyy-MM-dd HH:mm:ss"} 轉換成對應的foo時 如果FooVO.dt字段上的@JsonFormat沒有指定時區,則在轉換時出現了時區的問題
return new ResponseEntity<>(HttpStatus.OK);
}
}
<!-- 配置jdbc的url時沒有指定時區,所以插入Date數據類型時也存在了因時區造成的時間問題 -->
<!-- jdbc:mysql://ip:port/db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai -->
<insert id="save" parameterType="FooVO">
insert into foo(dt) values (#{dt})
</insert>