【发布时间】:2017-04-23 12:18:51
【问题描述】:
我已经解决了其他类似的问题,但对我没有任何帮助。
我所有的 API 都返回 JSON 作为响应默认情况下:
由于一些 XML API,我不得不添加 jackson-xml
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
现在默认为“不带接受头”所有响应都是 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)应该是 JSON。 (API 将 XML 作为字符串返回)
当 Accept Header : "Application/xml" 被定义时,响应应该是 XML。
任何建议都会有很大帮助。
谢谢。
【问题讨论】:
-
根据配置,您可以使用'mediaType'参数控制返回媒体类型。您是否尝试过 /getXml?mediaType=xml
-
@Stan : 不,我无法更改 RequestMapping,但我仍然会尝试查看结果
-
这与请求映射注释无关,据我了解,您对 Spring 使用 .parameterName("mediaType") 语句使用此参数检查媒体类型,因此您的服务器端没有更改跨度>
-
@Stan : 它起作用了:) :) 但是我必须将新的 URL 传达给客户?或者我可以在收到请求后操纵 URL?
-
@Stan :如果我没记错,那么添加类似 response.setContentType(MediaType.APPLICATION_XML_VALUE);在 API 中应该是一样的吧?
标签: spring spring-mvc spring-boot