我正在使用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());
}