[SPRING] Spring MVC에서 커스텀 MediaType을 어떻게 설정 하는가?
SPRINGSpring MVC에서 커스텀 MediaType을 어떻게 설정 하는가?
Spring MVC를 사용하여 JSON과 XML 미디어 포맷 모두에 대해 이미 컨트롤러를 사용하고있다. 콘텐츠 협상 구성에서 Accept 헤더에만 의존하고 맞춤 이름 미디어 유형을 소개합니다 (예 : "myXml"
내 구성 :
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer
.favorPathExtension(false)
.favorParameter(false)
.ignoreAcceptHeader(false)
.useJaf(false)
.mediaType(MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_JSON)
.mediaType(MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_XML)
.mediaType("myXml", MediaType.APPLICATION_XML)
.defaultContentType(MediaType.APPLICATION_JSON);
}
}
내 컨트롤러 :
@RequestMapping(value = "/manager/{id}",
method = RequestMethod.GET,
produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE}
)
@ResponseBody public Manager managers(@PathVariable long id){
return repo.getManagerById(id);
}
Accept 헤더 : application / json이 JSON을 생성하고 application / xml이 XML을 생성합니다. 다른 것은 406 Acceptable, 심지어 myXml을 반환합니다.
그래도 XML을 기대 ...
해결법
-
==============================
1.그 구성으로, 기본적으로 :
그 구성으로, 기본적으로 :
나는 당신이 이런 내용의 협상을 다룰 의도가 없다고 생각합니다.
Jaxb2RootElementHttpMessageConverter (JAXB를 사용하는 경우) 또는 MappingJackson2XmlHttpMessageConverter (Jackson을 사용하는 경우)를 등록하고이를 "application / xml"및 "myXml"미디어 유형으로 등록하는 것과 같이 HttpMessageConverters (여기 참조)를 사용자 정의 할 수 있습니다.
또한 RequestMapping 주석의 "produce"부분에 "myXml"을 추가하는 것을 잊지 마십시오. 컨트롤러 메소드는이를 생성 할 수있는 미디어 유형으로 선언해야합니다. 그렇지 않으면 다시 406을 반환합니다.
다음과 같은 이유로 "application / vnd.foobar.v.1.0 + xml"과 같은 미디어 유형을 사용해야합니다.
이 경우 구성에서 defaultContentType 부분을 그대로 유지하고 (아마도 사용자 정의 미디어 유형으로 설정) 나머지 부분은 버릴 수 있습니다.
어쨌든 맵핑 어노테이션의 produce 섹션에이 사용자 정의 미디어 유형을 선언해야합니다.
from https://stackoverflow.com/questions/27185375/how-to-configure-custom-mediatype-in-spring-mvc by cc-by-sa and MIT license