Spring RestTemplate与Jackson作为HttpMessageConverter和joda DateTime属性无法反序列化

Spa*_*ski 12 spring jodatime jackson jackson-modules

方案如下.我有一个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;
Run Code Online (Sandbox Code Playgroud)

我有一个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;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在当我联系webservice时,它无法使用以下错误消息反序列化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
Run Code Online (Sandbox Code Playgroud)

从不调用DateTimeDeserializer.class.任何人都知道我在这里缺少什么?

Spa*_*ski 15

好的,我在createRestTemplate()方法中缺少这一行.

restTemplate.setMessageConverters(messageConverters);
Run Code Online (Sandbox Code Playgroud)

  • 我很困惑 - 这条线是你原来的问题? (2认同)
  • 也许它不应该在原始文件中显示您的错误?只是做了同样的事情;-) (2认同)