如何解决使用HATEOAS时ZonedDateTime的Jackson反序列化问题
我使用的DTO有
private ZonedDateTime created;
如果我不使用HATEOAS,我得到的输出是
"created": "2020-08-21T13:11:39+01:00[Europe/Dublin]"
实施HATEOAS时
resourceAssembler.toResource(studentService.getStudentById())
我得到的是
"created": {
"offset": {
"totalSeconds": 3600,"id": "+01:00","rules": {
"transitions": [],"transitionRules": [],"fixedOffset": true
}
},"zone": {
"id": "Europe/London","rules": {
"transitions": [
{
"offsetBefore": {
"totalSeconds": -1500,"id": "-00:25","rules": {
"transitions": [],"fixedOffset": true
}
},"offsetAfter": {
"totalSeconds": -1521,"id": "-00:25:21","dateTimeAfter": {
"nano": 0,"hour": 23,"minute": 59,"second": 39,"year": 1880,
我为Jackson添加的依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
</dependency>
Jackson配置
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.disable(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS);
mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.registerModule(new JavaTimeModule());
return mapper;
}
我使用的SpringBoot版本是1.5.14
解决方法
Spring HATEOAS构造了自己的对象映射器,因此解决我的问题的解决方法是
@Configuration
public class ObjectMapperCustomizer {
private static final String SPRING_HATEOAS_OBJECT_MAPPER = "_halObjectMapper";
@Autowired
@Qualifier(SPRING_HATEOAS_OBJECT_MAPPER)
private ObjectMapper springHateoasObjectMapper;
@Bean(name = "objectMapper")
ObjectMapper objectMapper() {
springHateoasObjectMapper.configure(SerializationFeature.INDENT_OUTPUT,true);
springHateoasObjectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
springHateoasObjectMapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS,false);
springHateoasObjectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS,false);
springHateoasObjectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
springHateoasObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
springHateoasObjectMapper.registerModules(new JavaTimeModule());
return springHateoasObjectMapper;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。