私は 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);
"application/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 のservletResponse
ため、実際の contentType はthis.headers
response に設定されていません。
誰もこの問題に遭遇しますか? contentType を servletResponse に設定するアイデアはありますか? (ビジネスメソッドに servletResponse を注入するのは好きではありません)
次のコードを追加しAbstractHttpMessageConverter.write(xx)
て回避します。
if (contentType != null && (outputMessage instanceof ServletServerHttpResponse)) {
ServletServerHttpResponse response = (ServletServerHttpResponse) outputMessage;
response.getServletResponse().setContentType(contentType.toString());
}