返回“text / plain”而忽略“Accept”标题

问题描述 投票:0回答:2

我有这段代码:

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

我想要的是在这种情况下使用'text / plain'类型返回“true”,即使我的接受标题是'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);
}

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

java spring spring-mvc content-type http-accept-header
2个回答
0
投票

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

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

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

这种定义Accept标头的方式的匹配是灵活的 - 它使用包含而不是equals,因此诸如以下的请求仍将正确映射:

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

0
投票

在调用者中声明头

accept:text/plain

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

这里来电者可以(邮差,JS等)

© www.soinside.com 2019 - 2024. All rights reserved.