Java 如何使用全局设置强制springboot返回Json响应
这里有一些问题。测试我的应用程序的人告诉我,当他们试图直接将url输入到address中以通过chrome查询GET url时。我的api将始终返回如下XML格式的响应。Java 如何使用全局设置强制springboot返回Json响应,java,spring-boot,testing,Java,Spring Boot,Testing,这里有一些问题。测试我的应用程序的人告诉我,当他们试图直接将url输入到address中以通过chrome查询GET url时。我的api将始终返回如下XML格式的响应。 但是所有的响应都应该格式化为JSON字符串!XML是不可接受的! 我试图分析源代码,发现chrome直接发送的请求将具有如下属性: accept=text/html,application/xhtml+xml,application/xml;q=0.9,图像/avif,图像/webp,图像/apng,/;q=0.8,申请
但是所有的响应都应该格式化为JSON字符串!XML是不可接受的!
我试图分析源代码,发现chrome直接发送的请求将具有如下属性:
accept=text/html,application/xhtml+xml,application/xml;q=0.9,图像/avif,图像/webp,图像/apng,/;q=0.8,申请/签名交换;v=b3;q=0.9
内容类型=空
而任何其他应用程序将通过以下方式发送请求:
accept=*/*(或accept=application/json)
内容类型=应用程序/json
在这种情况下,springboot将对chrome发送的请求响应XML,因为缺少内容类型和指定的accept属性。
有一种方法可以通过在pom中排除jackson for XML来修复这种情况。但我不认为这是一种优雅的方式。
到目前为止,我拒绝修复这个问题,因为我已经告诉前端代码同事发送带有指定“application/json”属性的请求,并且没有再次出现问题。
但是,我认为我有责任解决这个问题,应该有更优雅的方法来解决这个问题。
我的应用程序中部署了太多api,无法为每个控制器设置响应类型。我正在为这个案子寻找一个全球性的背景。
我认为应该有一些方法可以像RequestInterceptor一样设置请求的头,但我发现在网关服务中直接修改这些请求的头是不可能的。
请帮我拿这个箱子。非常感谢 听起来您需要定义ContentNegotiationCongiuer。这是一份文件: 简单的回答是在Spring上下文中添加类似的内容
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
听起来您需要定义ContentNegotiationCongiurer。这是一份文件: 简单的回答是在Spring上下文中添加类似的内容
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
这不会解决这个问题,chrome中的响应仍然是XML。这不会解决这个问题,chrome中的响应仍然是XML