Spring RestTemplate使用Jackson作为HttpMessageConverter和joda DateTime属性进行反序列化

保存马可夫斯基

情况如下。我有一个ObjectMapper(Jackson 2),它注册一个JodaModule,能够序列化和反序列化Joda DateTime类型。此ObjectMapper已使用自定义JSON字符串进行了测试,并且可以正常工作。

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+1:00"));
objectMapper.setDateFormat(new ISO8601DateFormat());
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return objectMapper;

我有一个RestTemplateFactory,它负责实例化RestTemplate,并将先前配置的ObjectMapper bean设置为RestTemplate。

@Configuration
public class RestTemplateFactory {

  @Autowired
  private ObjectMapper objectMapper;

  @Bean
  public RestTemplate createRestTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
    MappingJackson2HttpMessageConverter jsonMessageConverter = new MappingJackson2HttpMessageConverter();
    jsonMessageConverter.setObjectMapper(objectMapper);
    messageConverters.add(jsonMessageConverter);
    // restTemplate.setMessageConverters(messageConverters); // This line was missing, but needs to be here. See answer.
    return restTemplate;
  }
}

现在,当我联系Web服务时,它无法使用以下错误消息反序列化DateTime对象:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not instantiate value of type [simple type, class org.joda.time.DateTime] from String value; no single-String constructor/factory method

此外,永远不会调用DateTimeDeserializer.class。有人知道我在这里想念什么吗?

保存马可夫斯基

好的,我的createRestTemplate()方法中缺少此行。

restTemplate.setMessageConverters(messageConverters);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用Jackson和Spring序列化Joda DateTime

在Spring MVC中使用JAXB注释使用Jackson进行反序列化的问题

spring-data-rest和控制器,使用相同的objectMaper进行序列化/反序列化

使用Spring Hateoas的jackson和Jackson2HalModule反序列化json时的null id属性

Java Spring使用RestTemplate反序列化嵌套对象

使用Jackson进行DateTime反序列化的默认时区(Joda-Time模块)

Jackson:使用其他属性名称进行序列化/反序列化

Spring Boot-Jackson日期序列化和反序列化

Joda Time / Jackson 2 / Spring的反序列化问题-无法实例化类型的值[简单类型,类org.joda.time.DateTime]

Spring RestTemplate布尔盖反序列化

使用RestTemplate和Unwrap Root时,Spring Boot(2.3.6.RELEASE)反序列化失败

使用json.net对对象属性进行条件序列化/反序列化

在Spring Boot中用Jackson反序列化Date对象

Spring + Jackson +反序列化通用对象列表

Spring使用JSONObject字段反序列化对象

使用Spring WebClient反序列化整数列表

Spring 使用额外的列反序列化 manytomany 表

Spring AMQP RabbitMQ InboundChannelAdapter 和 OutboundEndpoint 不同的序列化/反序列化策略

Spring Boot LocalDate字段序列化和反序列化

使用JsonTypeInfo进行序列化/反序列化

使用现有同级属性值对属性进行Jackson多态反序列化

SPRING REST正在对没有设置程序的属性进行反序列化

如何使用Jackson ObjectMapper反序列化Spring的ResponseEntity(可能使用@JsonCreator和Jackson mixins)

使用Jersey和Jackson进行Map的序列化和反序列化

Jackson映射:使用不同的属性名称对JSON进行反序列化

使用Jackson对JSON实体的动态属性进行反序列化

使用Jackson进行反序列化期间将列表属性中的对象的列表分组

使用Jackson JSON是否可以进行非对称序列化和反序列化?

使用spring反序列化JSON:未解决的前向引用Jackson Exception