为了账号安全,请及时绑定邮箱和手机立即绑定

忽略“接受”标题时返回“文本/纯文本”

忽略“接受”标题时返回“文本/纯文本”

慕沐林林 2021-09-03 10:58:57
我有这段代码:@RequestMapping(value = "/test", produces = "text/plain")@ResponseBodypublic Object test() {    return "true";}我想要的是在这种情况下以“文本/纯文本”类型返回“真”,即使我的接受标头显示“应用程序/json”或其他任何内容。现在,当我这样做时,我得到了 406。有没有简单的方法来做这样的事情?我的意思是真的很简单?我宁愿不更改我的配置文件,而这些文件将不仅仅影响这一种方法。编辑: 我找到了部分解决方案@RequestMapping(value = "/test")@ResponseBodypublic Object test(){    HttpHeaders responseHeaders = new HttpHeaders();    responseHeaders.setContentType(MediaType.TEXT_PLAIN);    return new ResponseEntity<>("true", responseHeaders, HttpStatus.OK);}但是有没有人知道更简单、更短的解决方案?
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

在调用者中声明标头

accept:text/plain

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

这里的来电者可以是(邮递员、JS 等)


查看完整回答
反对 回复 2021-09-03
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

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


映射由控制器方法生成的媒体类型值得特别注意——我们可以通过上面介绍的@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 头的方式的匹配是灵活的——它使用 contains 而不是 equals,所以像下面这样的请求仍然可以正确映射:


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



查看完整回答
反对 回复 2021-09-03
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信