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);
}
}
문제를 해결했습니다.
이제 기본적으로 모두RestController
JSON 반환(아니오인 경우)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=xml
xml 응답을 반환해야 합니다. 그렇지 않으면 기본값으로 반환됩니다.json(defaultContentType(MediaType.APPLICATION_JSON))
언급URL : https://stackoverflow.com/questions/41036377/spring-mvc-changing-default-response-format-from-xml-to-json
'programing' 카테고리의 다른 글
라즈베리 파이에서 운영체제 없이 C 프로그램을 실행하는 방법은 무엇입니까? (0) | 2023.07.15 |
---|---|
C에서 문자열에 있는 문자의 발생 횟수 계산 (0) | 2023.07.15 |
C는 표준 ABI를 가지고 있습니까? (0) | 2023.07.15 |
data.table의 행을 문자열 키 'order(-x,v)'에서 내림차순으로 정렬하면 data.table 1.9.4 이하에서 오류가 발생합니다. (0) | 2023.07.10 |
iPhone에서 날짜 문자열에서 밀리초 동안 사용하는 형식 문자열은 무엇입니까? (0) | 2023.07.10 |