【发布时间】:2011-02-06 01:14:45
【问题描述】:
我有一个弹簧动作,我正在从控制器渲染一些 json,此时它返回内容类型 'text/plain;charset=ISO-8859-1'。
如何将其更改为“应用程序/json”?
【问题讨论】:
-
另请参阅类似问题的答案:stackoverflow.com/a/11349642/66686
标签: java spring spring-mvc
我有一个弹簧动作,我正在从控制器渲染一些 json,此时它返回内容类型 'text/plain;charset=ISO-8859-1'。
如何将其更改为“应用程序/json”?
【问题讨论】:
标签: java spring spring-mvc
将HttpServletResponse 传递给您的操作方法并在那里设置内容类型:
public String yourAction(HttpServletResponse response) {
response.setContentType("application/json");
}
【讨论】:
import javax.servlet.http.HttpServeltResponse
您是否尝试过使用MappingJacksonJsonView?
Spring-MVC 视图,通过使用 Jackson 的 ObjectMapper 为当前请求序列化模型来呈现 JSON 内容。
它将内容类型设置为:application/json。
【讨论】:
@RequestMapping(value = "jsonDemoDude", method = RequestMethod.GET)
public void getCssForElasticSearchConfiguration(HttpServletResponse response) throws IOException {
String jsonContent= ...;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response);
wrapper.setContentType("application/json;charset=UTF-8");
wrapper.setHeader("Content-length", "" + jsonContent.getBytes().length);
response.getWriter().print(jsonContent);
}
如果您想要JSONP(跨站点 json 请求),您还可以为“回调”部分添加额外的 X 字节或任何内容。
【讨论】:
是的,但这只有在控制器中抓取 HttpServletResponse 时才有效。
在 Spring 3 中,我们被鼓励避免引用 servlet 域中的任何内容,只保留我们的 POJO 和注释。有没有办法在不引用 HttpServletResponse 的情况下做到这一点?即,保持自己纯洁?
【讨论】: