繁体   English   中英

春季的内容类型和@ResponseBody

[英]Content-type and @ResponseBody in spring

这可能很简单,但对我的理解将非常有帮助。

我在restcontroller中使用@ResponseBody将String值返回给浏览器。 在浏览器中成功接收到响应字符串。

即:

@RequestMapping(value="/foo", method=RequestMethod.GET)
@ResponseBody
public String foo() {
    return "bar";
}

以上回应的内容类型是什么? 如果这就像在servlet响应中编写setAttribute一样,那么该属性名称又如何呢?

如果浏览器仅接受“ application / json”,spring将如何处理响应?

提交的代码会生成text / html,默认情况下,所有映射的Controller方法也会生成text / html。 如果要生成application / json,则必须将RequestMapping更改为

@RequestMapping(value="/foo", method=RequestMethod.GET, produces = "application/json")

但是,这不是有效的Json字符串,您必须更改它,因为您提交的方法将返回空主体。 提交的示例将是有效的文本/纯文本。

当请求包含标头"Accept: application/json"并返回其他内容类型时,Spring返回Json类型的响应,解释抛出了HttpMediaTypeNotAcceptableException

关于servlet的类比-请解释,我不完全理解您的意思。 字符串作为响应主体返回,它与请求属性非常不同。 您想实现什么?

我认为内容类型将是纯文本。 如果请求集接受“ application / json”,则取决于您的浏览器/工具。 大多数其他客户端不会显示它,因为它不是application / json。 如果直接调用该API,我会认为它是由于浏览器内容嗅探而显示的(可以通过标头禁用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM