spring mvc - @ResponseBody并基于浏览器生产?

时间:2013-07-10 08:46:23

标签: java spring spring-mvc

有没有简单的方法可以根据浏览器返回不同的内容类型?

当涉及到application / json时,我正在使用IE浏览器。大部分时间都有效,有时则没有。 我想总是返回json对象(通过MappingJacksonHttpMessageConverter),但在使用IE时将内容类型设置为text / plain。

写入response.setContentType是无效的因为我有很多控制器并且扩展转换器也没有多大帮助,因为我没有请求头..

任何想法?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用User-agent从HTTP请求中获取@RequestHeader("User-Agent")标头,然后将内容类型设置为HttpServletResponse对象,该对象将由Spring框架自动设置。这是示例

@Controller
public class FoobarController {

    @RequestMapping("/path")
    @ResponseBody
    public String getContent(@RequestHeader("User-Agent") String userAgent,
                             HttpServletResponse response) {
        if (isIE(userAgent)) {
            response.setContentType("text/plain");
        } else {
            response.setContentType("text/json");
        }
        ...
        return "{\"key\":\"value\"}";
    }
}

这是IE的User-Agent标题的一部分,

  • Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.0; Trident / 4.0)
  • Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.0; Trident / 4.0)
  • Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; Trident / 5.0)

您可以点击here查看详情。