我有以下API
public ResponseEntity<ResponseDataToSeller> getTrackingDataByDate(@RequestBody RequestBodyBySeller requestBodyBySeller) {
System.out.println(requestBodyBySeller.getEndDate());
System.out.println(requestBodyBySeller.getEndDate().getDate());
System.out.println(requestBodyBySeller.getEndDate().getHours());
public class RequestBodyBySeller {
@ApiModelProperty(dataType="Date", notes = "endDate",required = true)
Date endDate;当我使用"endDate": "2018-10-11"提出请求时,它会打印
2018-10-11 16:54:45.897 INFO 11996 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 3 ms
Wed Oct 10 20:00:00 EDT 2018
10
20这会扰乱SQL查询,因为我正在测试是否是hit_date <= #{endDate}。它应该返回2018-10-11年的结果,但不是,因为Spring将日期解释为2018-10-10。如何让Spring在将日期参数解析为API时使用UTC时区?
Spring Boot 1.5.13,MyBatis 3.4.5,MyBatis Spring1.3.1
发布于 2018-10-12 18:04:42
我将类更改为java.time.LocalDate并添加了这个依赖项
<!-- For LocalDate to be deserialized using ISO format -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>发布于 2018-10-11 21:16:42
使用本地日期,问题是当涉及日期时,java尝试将日期转换为服务器时区,因为没有指定时区,它需要时间ad UTC,然后进行转换,LocalDate不包含时区信息,因此,日期将按原样解析。
对不起,忘了提一下,要处理本地约会时间,您需要使用杰克逊-数据类型-jsr310 310。然后,正如示例所述,您可以用以下内容对类进行注释:
@JsonFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthdate;*发布于 2018-10-12 03:51:02
在使用springmvc时,有一些方法可以定义jackson特性。
spring.jackson.xxxx。比如你想要设置时区。在spring.jackson.time-zone=xxx中使用add application.propertiesJackson2ObjectMapperBuilderCustomizer的springObjectMapper bean,定制您想要的。https://stackoverflow.com/questions/52768888
复制相似问题