小编Mrv*_*wyl的帖子

Jackson LocalDate/Time 反序列化

我配置了 jackson 以便它给我一个简单的字符串表示 ifjava.time.LocalDatejava.time.LocalDateTime。这可以在序列化过程中找到,例如当我在 REST api 上获取数据时。

不过反过来也行不通。当我尝试将数据发送到服务器并且 JSON 应该被解析为 java 对象时,会抛出此异常:

javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: 无法构造 java.time.LocalDateTime 的实例: 没有从字符串值反序列化的字符串参数构造函数/工厂方法 ('2018-04- 19T14:10:30.903')

经过几个小时的研究,我设法让它工作,但仅限于我分别用@JsonDeserialize(using = LocalDateDeserializer.class)或注释的属性@JsonDeserialize(using = LocalDateTimeDeserializer.class)

在我看来,如果我可以在一个中心位置定义这些映射,那将是理想的。

ObjectMapper 配置:

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
    @Override
    public ObjectMapper getContext(Class<?> aClass) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule());
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

        return mapper;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试向 JavaTimeModule 添加自定义反序列化器,但没有成功:

JavaTimeModule dateTimeModule = new JavaTimeModule();
dateTimeModule.addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE);
dateTimeModule.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE);

mapper.registerModule(dateTimeModule);
Run Code Online (Sandbox Code Playgroud)

长话短说:有没有办法全局定义映射,这样我就不需要在每个字段上添加这些注释。谢谢!

编辑:

好的:我用邮递员测试了它,没有注释,它按预期工作。但是,当我运行单元测试 (JerseyTest) 时,它会抛出上述异常。我将 …

java jersey jersey-test-framework jackson2

4
推荐指数
1
解决办法
3062
查看次数

标签 统计

jackson2 ×1

java ×1

jersey ×1

jersey-test-framework ×1