2017-04-20 10 views
0

jackson 변환기에 새로운 유형을 추가하려고합니다. 사용자 정의 유형이지만 실제로는 json이고 표준 객체 매퍼는 java 객체로 변환해야합니다.Mapping2JacksonHttpMessageConverter에 새로운 미디어 유형을 추가하십시오.

내가 노력하고 다음과 같은 : 내가 시작하고 지원되는 유형의 목록을 살펴에서 응용 프로그램을 디버깅 할 때

@Bean 
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() 
{ 
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 

    MediaType fhir = new MediaType("application", "json+fhir"); 

    List<MediaType> jacksonTypes = new ArrayList<>(converter.getSupportedMediaTypes()); 

    jacksonTypes.add(fhir); 

    converter.setSupportedMediaTypes(jacksonTypes); 

    return converter; 
} 

내가 거기에 fhir 미디어 타입을 볼 수 있지만 난 여전히 같은 오류가 발생합니다 :

Could not extract response: no suitable HttpMessageConverter found for response type [class MyClass] and content type [application/json+fhir] 

이 사용자 지정 형식을 사용하려면 메시지 변환기를 얻는 데 도움이 필요합니다.

@Bean 
RestTemplate restTemplate() 
{ 
    RestTemplate restTemplate = new RestTemplate(); 

    List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters(); 
    messageConverters.add(mappingJackson2HttpMessageConverter()); 

    return restTemplate; 
} 

MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() 
{ 
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();  
    ObjectMapper objectMapper = new ObjectMapper(); 
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    converter.setObjectMapper(objectMapper); 

    MediaType fhir = new MediaType("application", "json+fhir"); 

    List<MediaType> jacksonTypes = new ArrayList<>(converter.getSupportedMediaTypes()); 

    jacksonTypes.add(fhir); 

    converter.setSupportedMediaTypes(jacksonTypes); 

    return converter; 
} 
+0

* 참고 * 다음 형식의 구문은 json'는 '이며,이'fhir'는 의미를 나타내는 경우 그것의 미디어 타입은 (기본적으로'application/* + json'을 지원하기 때문에)'MappingJackson2HttpMessageConverter'에 의해 지원되는'application/hfir + json'이어야합니다. – pozs

+0

유형의 arraylist를 디버깅 할 때 지원되는 유형을 볼 수 있습니다. 그래서 기본적으로 아무것도하지 않고도 괜찮아 질 것입니다. – berimbolo

+0

예. 그러나 OFC를 사용하려면 변환기를 등록해야합니다 (@ StanislavL은 유효한 포인트를 발생시킵니다). – pozs

답변

1

이 변환이 제대로 등록되지 않은 추측 : -

감사

는 ** 편집 나는 아래이 사용 Stanislavs 응답을 고정. 잭슨은 별도로 변환기를 추가하고 귀하의 빈은 무시됩니다 생각합니다.

그냥 MappingJackson2HttpMessageConverter 을 확장하여 변환 클래스를 만들고처럼 등록

the example를 참조하십시오이

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"> 
    <mvc:message-converters register-defaults="true"> 
     <bean class="com.example.MyMappingJackson2HttpMessageConverter"/> 
    </mvc:message-converters> 
</mvc:annotation-driven> 
+0

스프링 부트에 대해 읽은 내용이 모두 맞지만 나머지 템플릿이 알고있는 모든 메시지 변환기를 디버깅했으며 잭슨 변환기의 다른 인스턴스와 실제로 연결되어 있습니다. 감사 – berimbolo