Dim*_*iwa 3 serialization spring jackson jsr310 spring-boot
我正在用 JSR310 替换 JodaTime,并且 JodaTime() 的模块工作正常。
我正在尝试在 spring-boot 应用程序中重新配置日期的序列化。
我不能同时保留两者,所以我正在寻找一种将我的日期序列化/反序列化为 ISO 8601 的方法。
我遵循了这里的建议,但这没有帮助:http : //lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/
这是我JacksonConfig.java的objectMapper:
@Configuration
public class JacksonConfig extends RepositoryRestMvcConfiguration {
private static final Logger logger = LoggerFactory.getLogger(JacksonConfig.class);
public static final DateTimeFormatter FORMATTER = ofPattern("dd::MM::yyyy");
@Bean
// Override and Primary due to bug: https://github.com/spring-projects/spring-boot/issues/6529
@Override
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer());
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer());
mapper.registerModule(javaTimeModule);
return mapper;
}
public class LocalDateSerializer extends JsonSerializer<LocalDate> {
@Override
public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.format(FORMATTER));
}
}
public class LocalDateDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
return LocalDate.parse(p.getValueAsString(), FORMATTER);
}
}
}
Run Code Online (Sandbox Code Playgroud)
豆子得到实例化,但serialize和deserialize永远不会被调用。
我也试过JavaTimeModule没有自定义序列化器/反序列化器,它也不起作用。
它似乎根本没有影响。
有没有办法对此进行更多调试?
我正在使用 spring-hateoas 和 spring-data,我有这个可能相关的问题:
https://github.com/spring-projects/spring-hateoas/issues/333
利用 java time 模块中提供的 ser/deser。这实际上使用自定义格式化程序设置它们。
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
JavaTimeModule javaTimeModule = new JavaTimeModule();
LocalDateSerializer localDateSerializer = new LocalDateSerializer(FORMATTER);
javaTimeModule.addSerializer(LocalDate.class, localDateSerializer);
LocalDateDeserializer localDateDeserializer = new LocalDateDeserializer(FORMATTER);
javaTimeModule.addDeserializer(LocalDate.class, localDateDeserializer);
mapper.registerModule(javaTimeModule);
return mapper;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3257 次 |
| 最近记录: |