복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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

  4. from https://stackoverflow.com/questions/41036377/spring-mvc-changing-default-response-format-from-xml-to-json by cc-by-sa and MIT license