2

我正在使用Jetty8,jetty的servletResponse实现是org.eclipse.jetty.server.Response,它有一个默认的ContentType“text/html;UTF-8”,

我的请求映射方法:

@RequestMapping(value = "/post1", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public NodeConfig post1(@RequestBody NodeConfig config) {
    return config;
}

AGSONHttpMessageConverter将处理返回的值config

GSONHttpMessageConverter extends
        AbstractHttpMessageConverter<Object>

我看到AbstractHttpMessageConverter.write(xxx)

HttpHeaders headers = outputMessage.getHeaders();
//...
headers.setContentType(contentType);

“应用程序/json”设置为 response.headers,但不是 response.contentType。检查ServletServerHttpResponse.writeHeaders(xxx)

if (this.servletResponse.getContentType() == null && this.headers.getContentType() != null) {
                this.servletResponse.setContentType(this.headers.getContentType().toString());
            }

因为默认的 contentType in servletResponse,真正的 contentType inthis.headers没有设置为响应。

有人遇到这个问题吗?将 contentType 设置为 servletResponse 的任何想法?(我不喜欢将 servletResponse 注入我的业务方法)

我添加以下代码来AbstractHttpMessageConverter.write(xx)解决它。

    if (contentType != null && (outputMessage instanceof ServletServerHttpResponse)) {
        ServletServerHttpResponse response = (ServletServerHttpResponse) outputMessage;
        response.getServletResponse().setContentType(contentType.toString());
   }
4

0 回答 0