忽略“ Accept”标头时返回“文本/纯文本”

时间:2018-09-06 10:40:02

标签: java spring spring-mvc content-type http-accept-header

我有这段代码:

@RequestMapping(value = "/test", produces = "text/plain")
@ResponseBody
public Object test() {
    return "true";
}

在这种情况下,即使我的accept标头显示“ application / json”或其他内容,我想要的还是返回“ true”和“ text / plain”类型。现在,当我这样做时,我得到406。有没有做这种事情的简单方法?我的意思很简单?我宁愿不更改配置文件,该配置文件不仅会影响这种方法。

编辑: 我找到了部分解决方案

@RequestMapping(value = "/test")
@ResponseBody
public Object test(){
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setContentType(MediaType.TEXT_PLAIN);
    return new ResponseEntity<>("true", responseHeaders, HttpStatus.OK);
}

但是,有谁知道更简单,更短的解决方案?

2 个答案:

答案 0 :(得分:0)

要获得更灵活的设置,您可以删除produces = "text/plain",也可以添加headers ="Accept=application/json"。参见Baeldung article

  

由控制器方法产生的媒体类型映射特别值得关注-我们可以通过上面介绍的@RequestMapping标头属性基于请求的标头映射请求:

@RequestMapping(
  value = "/ex/foos", 
  method = GET, 
  headers = "Accept=application/json")
@ResponseBody
public String getFoosAsJsonFromBrowser() {
    return "Get some Foos with Header Old";
}
     

这种定义Accept标头的方式非常灵活-它使用contains而不是equals,因此如下请求仍然可以正确映射:

curl -H "Accept:application/json,text/html"  http://localhost:8080/spring-rest/ex/foos

答案 1 :(得分:0)

在调用方中声明标头

accept:text/plain

这样您就可以声明来自服务器的响应为文本/纯文本

这里的呼叫者可以是(邮递员,JS等)