java - Spring 中的内容类型和@ResponseBody

标签 java spring spring-mvc spring-restcontroller

它可能很简单,但它对我理解非常有帮助......

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

即:

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

上述响应的内容类型是什么?如果这就像在 servlet 响应中编写 setAttribute 一样,属性名称是什么?

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

最佳答案

提交的代码生成文本/html,默认情况下所有映射的 Controller 方法也是如此。如果你想生成 application/json,你必须将你的 RequestMapping 更改为

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

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

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

关于 servlet 类比 - 请解释,我不完全理解你的意思。 String 作为响应主体返回,它与请求属性有很大不同。你想达到什么目的?

关于java - Spring 中的内容类型和@ResponseBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38744878/

相关文章:

Spring:/** 和/* 关于路径的区别

java - 是否有一种通用方法来验证(基于 xml 的)spring 配置是否有效?

java - 如何使用 AOP 在参数上拦截 super 中的方法调用?

java - Spring Boot Rest Controller 使用 Jackson 和 Hibernate 将 POJO 转换为 JSON 时出错

java - Spring注解属性设置与方法调用

java - Spring MVC 在一个请求中返回多个对象

java - Spring Boot Controller 应如何处理 'missing' 请求 header ?

java - 如何在 Thymeleaf 和 Spring 中设置选定的选项

java - 具有相同事件监听器的堆叠组件

java - 在对话中用 jee6 替换 Seam