시나리오는 다음과 같습니다. JodaModule을 등록하는 ObjectMapper (Jackson 2)를 사용하여 Joda DateTime 유형을 직렬화 및 비 직렬화 할 수 있습니다. 이 ObjectMapper는 사용자 정의 JSON 문자열로 테스트되며 예상대로 작동합니다.Jackson을 HttpMessageConverter로 설정하고 joda DateTime 속성을 deserialize 할 수없는 Spring RestTemplate
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;
은 내가 RestTemplate의 인스턴스를 담당하는 RestTemplateFactory 있고, 그것은 RestTemplate에 이전에 구성된 ObjectMapper 빈을 설정합니다.
@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;
}
}
지금은 그것이 다음과 같은 오류 메시지가 해제 직렬화 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는 호출되지 않습니다를. 누구나 내가 여기에서 놓친 것을 생각할 수 있습니까?
혼란 스럽네요. 그 선은 원래 질문 이었나요? –
원래 없었습니다. –
아마도 원래 오류가 나타나면 안됩니다. 그냥 똑같은 짓을 했어 ;-) –