programing

Spring mvc : 기본 응답 형식을 xml에서 json으로 변경합니다.

muds 2023. 7. 15. 10:38
반응형

Spring mvc : 기본 응답 형식을 xml에서 json으로 변경합니다.

저는 비슷한 질문들을 해봤지만 아무 것도 되지 않았습니다.

기본적으로 모든 my API의 JSON이 응답으로 반환됩니다.

일부 XML API 때문에 jackson-xml을 추가해야 했습니다.

    <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>

기본적으로 "허용 헤더 없음" 모든 응답은 XML입니다.

JSON을 기본 Response 형식으로 하고 싶습니다.

여기 문서에 명시된 바와 같이:

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)그러면 XML API에서도 JSON을 반환하는 모든 것이 JSON입니다.

사례 2: 언제ignoreAcceptHeader(false)기본값은 XML입니다.

API의 모양을 다음과 같이 언급하는 것을 잊었습니다.

@RequestMapping(value = "/getXml", method = RequestMethod.GET)
public ResponseEntity<String> getXml( HttpServletRequest request)
        throws JAXBException {
    return returnXml();
}

저는 여기서 완전히 길을 잃었습니다. 제가 원하는 것은 기본값(AcceptHeader 없음)은 JSON이어야 합니다.(API가 XML을 문자열로 반환)

또한 Accept Header: "Application/xml"이 정의된 경우 응답은 XML이어야 합니다.

어떤 조언이든 큰 도움이 될 것입니다.

감사해요.

일반적으로 json 응답을 받으려면 잭슨 데이터 바인딩 모듈이 필요합니다.

<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(..)

나를 위해, 추가.

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8);
    }

}

문제를 해결했습니다.

이제 기본적으로 모두RestControllerJSON 반환(아니오인 경우)Accept헤더를 입력합니다.또한 만약에Accept: application/xml헤더가 통과되면 XML이 됩니다.

또한 읽을 가치가 있습니다: https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc

ignoreAcceptHeader를 true로 설정하고 preferPathExtension을 false로 설정했으므로 봄은 콘텐츠 협상을 위한 다른 대안에 의존합니다.XML 및 JSON을 구성한 URL 매개 변수를 찾습니다.

@stan이 지적한 바와 같이/getXml?mediaType=xmlxml 응답을 반환해야 합니다. 그렇지 않으면 기본값으로 반환됩니다.json(defaultContentType(MediaType.APPLICATION_JSON))

언급URL : https://stackoverflow.com/questions/41036377/spring-mvc-changing-default-response-format-from-xml-to-json

반응형