Spring 在 Jasperreports 更新后 returns XML 而不是 JSON Rest Controller

Spring Rest Controller returns XML instead of JSON after Jasperreports update

我有一个 Spring 版本为 2.6.4 的引导项目。 在我将 jasperreports 依赖项更新为 6.19.0 之后,我所有的 RestControllers returns 现在 XML 而不是 JSON 我在哪里可以更改它,而不更改为

@GetMapping(produces = {"application/json"})

每种方法?

我今天遇到了同样的问题,我检查了 Chrome,发现它没有在接受 header 中添加 application/json。 我的解决方案是创建一个包装过滤器:

@Component
public class JsonRequestHeaderFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper((HttpServletRequest) request) {
            @Override
            public Enumeration<String> getHeaders(String name) {
                if (name.equals("Accept")) {
                    Set<String> customHeaders = new HashSet<String>();
                    Enumeration<String> curHeaders = super.getHeaders(name);
                    while (curHeaders.hasMoreElements()) {
                        String header = curHeaders.nextElement();
                        customHeaders.add(MediaType.APPLICATION_JSON_VALUE.concat(";").concat(header));
                    }

                    return Collections.enumeration(customHeaders);
                }
                return super.getHeaders(name);
            }
        };

        chain.doFilter(requestWrapper, response);
    }
}

在 configureContentNegotiation(ContentNegotiationConfigurer configurer) 方法中设置默认类型。

@Configuration
class WebMvcConfiguration implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer)
    {
        configurer.defaultContentType(MediaType.APPLICATION_JSON);
    }
}