[SPRING] Jackson과 HttpMessageConverter 및 joda DateTime 속성이 deserialize에 실패한 Spring RestTemplate
SPRINGJackson과 HttpMessageConverter 및 joda DateTime 속성이 deserialize에 실패한 Spring RestTemplate
시나리오는 다음과 같습니다. JodaModule을 등록하는 ObjectMapper (Jackson 2)를 사용하여 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;
RestTemplate을 인스턴스화하는 역할을하는 RestTemplateFactory가 있고 이전에 구성된 ObjectMapper 빈을 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;
}
}
이제 내가 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
또한 DateTimeDeserializer.class는 절대로 호출되지 않습니다. 누구나 내가 여기에서 놓친 것을 알고 있습니까?
해결법
-
==============================
1.좋아, 내 createRestTemplate () 메서드에서이 줄을 놓치고 있었다.
좋아, 내 createRestTemplate () 메서드에서이 줄을 놓치고 있었다.
restTemplate.setMessageConverters(messageConverters);
-
==============================
2.종속성 추가
종속성 추가
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-joda</artifactId> <version>2.9.0.pr4</version> </dependency>
다음과 같이 역 직렬화를 위해 DateTimeDeserializer.class를 사용하십시오.
@JsonDeserialize(using = DateTimeDeserializer.class) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy", timezone = "Europe/Berlin") private DateTime date;
나를 위해 잘 작동합니다. 사용자 지정 메시지 변환기를 추가 할 필요가 없습니다.
from https://stackoverflow.com/questions/21355450/spring-resttemplate-with-jackson-as-httpmessageconverter-and-joda-datetime-prope by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] remember-me 및 authentication-success-handler (0) | 2019.02.05 |
---|---|
[SPRING] Spring 4.0 + Security 3.2 + j_spring_security_check의 Java 구성 (0) | 2019.02.05 |
[SPRING] 유효성 검사기에 서비스 자동 연결 (0) | 2019.02.05 |
[SPRING] Spring MVC에서 드롭 다운 상자를 채우는 방법 (0) | 2019.02.05 |
[SPRING] java.lang.Class는 java.lang.reflect.ParameterizedType에 캐스트 할 수 없습니다. (0) | 2019.02.05 |