[SPRING] 봄 mvc : xml에서 json으로 기본 응답 형식 변경
SPRING봄 mvc : xml에서 json으로 기본 응답 형식 변경
나는 비슷한 질문을했지만 다른 어떤 것도 나를 위해 일했다.
내 API의 응답으로 JSON을 반환합니다. 기본값 :
일부 XML API 때문에 jackson-xml을 추가해야했습니다.
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
이제 기본적으로 "Accept accept header없이"모든 응답은 XML입니다.
기본 응답 형식으로 JSON을 사용하고 싶습니다.
여기에 문서에 명시된 바와 같이 :
https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc
나는 다음과 같은 설정을 구현했다 :
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false).favorParameter(true).parameterName("mediaType").ignoreAcceptHeader(true)
.useJaf(false).defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML).mediaType("json", MediaType.APPLICATION_JSON);
}
사례 1 : ignoreAcceptHeader (true)를하면 JSON을 반환하는 XML API도 모두 JSON입니다.
사례 2 : ignoreAcceptHeader (false)가 기본값 인 경우 XML입니다.
나는 내 API의 모습을 다음과 같이 언급하는 것을 잊는다.
@RequestMapping(value = "/getXml", method = RequestMethod.GET)
public ResponseEntity<String> getXml( HttpServletRequest request)
throws JAXBException {
return returnXml();
}
나는 여기에서 아주 길을 잃었다. 원하는 것은 AcceptHeader가없는 Default가 JSON이어야한다. (API는 XML을 String으로 반환합니다)
Accept Header : "Application / xml"이 정의되면 응답은 XML이어야합니다.
어떤 충고라도 큰 도움이 될 것입니다.
감사.
해결법
-
==============================
1.일반적으로 json 응답을 얻으려면 jackson-databind 모듈이 필요합니다.
일반적으로 json 응답을 얻으려면 jackson-databind 모듈이 필요합니다.
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${json-jackson-version}</version> </dependency>
구성에 MappingJackson2HttpMessageConverter를 정의해야합니다.
@Configuration @EnableWebMvc public class WebAppMainConfiguration extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); [..] super.configureMessageConverters(converters); } [...] }
귀하의 경우, 자신 만의 AbstractGenericHttpMessageConverter를 구현할 수 있으므로 미디어 유형에 따라 서로 다른 구체적인 변환기간에이 변환기를 전환 할 수 있습니다.
메소드 검사 AbstractGenericHttpMessageConverter # writeInternal (..)
-
==============================
2.ignoreAcceptHeader를 true로 설정하고 favorPathExtension을 false로 설정 했으므로 Spring은 내용 협상을위한 다른 대안에 의존합니다. 그것은 당신이 xml과 json을 구성한 url 매개 변수를 볼 것입니다.
ignoreAcceptHeader를 true로 설정하고 favorPathExtension을 false로 설정 했으므로 Spring은 내용 협상을위한 다른 대안에 의존합니다. 그것은 당신이 xml과 json을 구성한 url 매개 변수를 볼 것입니다.
@stan pointed / getXml? mediaType = xml은 xml 응답을 반환해야합니다. 그렇지 않으면 기본값이 json (defaultContentType (MediaType.APPLICATION_JSON))이됩니다.
-
==============================
3.나를 위해,
나를 위해,
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8); } }
문제를 해결했다.
요청에 Accept 헤더가 없으면 기본적으로 모든 RestController가 JSON을 반환합니다. 또한 Accept : application / xml 헤더가 전달되면 결과는 XML입니다.
또한 읽을 가치가있는 사이트 : https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc
from https://stackoverflow.com/questions/41036377/spring-mvc-changing-default-response-format-from-xml-to-json by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] spring-boot를 사용할 때 spring-boot 명령 줄 속성을 사용할 수 있습니까? (0) | 2019.05.06 |
---|---|
[SPRING] SpEL에서 어떻게 값을 벗어나나요? (0) | 2019.05.06 |
[SPRING] 봄 mvc. 대소 문자를 구별하지 않는 매개 변수 매핑 가져 오기 (0) | 2019.05.06 |
[SPRING] Log4J - SiftingAppender와 유사한 기능 (0) | 2019.05.06 |
[SPRING] @Constructor annotation에 의해 annoted 된 Spring 구성 클래스에 기본 생성자가 있어야하는 이유는 무엇입니까? (0) | 2019.05.06 |