0

我有这段代码:

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

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

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

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

但是有没有人知道更简单、更短的解决方案?

4

2 回答 2

0

在调用者中声明标题

accept:text/plain

这样您就可以将来自服务器的响应声明为 text/plain

这里调用者可以是(邮递员,JS等)

于 2018-09-06T10:54:55.727 回答
0

对于更灵活的设置,您可以删除produces = "text/plain"并添加headers ="Accept=application/json". 见Baeldung 文章

映射由控制器方法生成的媒体类型值得特别注意——我们可以通过上面介绍的 @RequestMapping 标头属性根据其 Accept 标头映射请求:

@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
于 2018-09-06T10:49:27.753 回答