Java 如何使用全局设置强制springboot返回Json响应

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,申请

这里有一些问题。测试我的应用程序的人告诉我,当他们试图直接将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,申请/签名交换;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