小伙伴的疑问
解答小伙伴的疑问
我们可以使用SpringBoot依赖中的@JsonFormat注解,将前端通过json传上来的时间,通过@RequestBody自动绑定到Bean里的LocalDateTime成员上。具体的绑定注解使用方法如下所示。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")
出现问题的版本
我使用Spring Boot 2.0.0 时,直接在字段上加上@JsonFormat 注解就可以完成数据的绑定。
而在使用Spring Boot 1.5.8时,只在字段上加上@JsonFormat 注解,在数据绑定时无法将Date类型的数据自动转化为字符串类型的数据。
解决方法
1.将SpringBoot版本升级为2.0.0及以上。
2.如果不升级SpringBoot版本,可以按照下面的方式解决问题。
不升级SpringBoot版本,添加Jackson对Java Time的支持后,就能解决这个问题。
在pom.xml中添加:
<dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-parameter-names</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jdk8</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency>
添加JavaConfig,自动扫描新添加的模块:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.fasterxml.jackson.databind.ObjectMapper; @Configuration public class JacksonConfig { @Bean public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.findAndRegisterModules(); return objectMapper; } }
或者在application.properties添加如下配置:
spring.jackson.serialization.write-dates-as-timestamps=false
或者只注册JavaTimeModule,添加下面的Bean
@Bean public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.registerModule(new JavaTimeModule()); return objectMapper; }