【问题标题】:Java spring framework - how to set content type?Java Spring框架-如何设置内容类型?
【发布时间】:2011-02-06 01:14:45
【问题描述】:

我有一个弹簧动作,我正在从控制器渲染一些 json,此时它返回内容类型 'text/plain;charset=ISO-8859-1'。

如何将其更改为“应用程序/json”?

【问题讨论】:

标签: java spring spring-mvc


【解决方案1】:

HttpServletResponse 传递给您的操作方法并在那里设置内容类型:

public String yourAction(HttpServletResponse response) {
    response.setContentType("application/json");
}

【讨论】:

  • 您好,我试过了,编译时出现错误“找不到符号符号:类 HttpServletResponse”
  • 嗯,你导入了吗? import javax.servlet.http.HttpServeltResponse
  • 你的类路径中有 servlet-api
【解决方案2】:

您是否尝试过使用MappingJacksonJsonView

Spring-MVC 视图,通过使用 Jackson 的 ObjectMapper 为当前请求序列化模型来呈现 JSON 内容。

它将内容类型设置为:application/json

【讨论】:

  • 嘿,我正在手动执行 Spring 已经为我提供的内容。谢谢指点:)
【解决方案3】:
 @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 字节或任何内容。

【讨论】:

    【解决方案4】:

    是的,但这只有在控制器中抓取 HttpServletResponse 时才有效。

    在 Spring 3 中,我们被鼓励避免引用 servlet 域中的任何内容,只保留我们的 POJO 和注释。有没有办法在不引用 HttpServletResponse 的情况下做到这一点?即,保持自己纯洁

    【讨论】:

    猜你喜欢
    • 2022-11-03
    • 2016-09-28
    • 2014-10-21
    • 2012-07-31
    • 1970-01-01
    • 2015-08-18
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多