这可能很简单,但对我来说理解会很有帮助......
我在restcontroller中使用@ResponseBody将String值返回给浏览器。响应字符串已在浏览器中成功接收。
即:
@RequestMapping(value="/foo", method=RequestMethod.GET)
@ResponseBody
public String foo() {
return "bar";
}
上述回复的内容类型是什么?如果这就像在servlet响应中编写setAttribute那么属性名称是什么?
如果浏览器只接受“application / json”,那么spring会如何处理响应?
答案 0 :(得分:4)
提交的代码生成text / html,默认情况下所有映射的Controller方法都是如此。如果要生成application / json,则必须将RequestMapping更改为
@RequestMapping(value="/foo", method=RequestMethod.GET, produces = "application/json")
但是,这不是有效的Json String,您必须更改它,因为您提交的方法将返回空体。提交的示例将是有效的text / plain。
当请求包含标头"Accept: application/json"
并返回其他内容类型时,Spring返回Json类型的响应,说明抛出了HttpMediaTypeNotAcceptableException
。
关于servlet类比 - 请解释一下,我不完全明白你的意思。 String作为响应主体返回,它与请求属性非常不同。你想达到什么目的?
答案 1 :(得分:2)
我假设内容类型是纯文本/文本。如果请求集接受“application / json”,则取决于您的浏览器/工具。大多数休息客户端不会显示它,因为它不是application / json。如果你直接调用API,我会认为它是由于浏览器内容嗅探而显示的(可以通过标题禁用)。