@RequestMapping(value ="/produces", produces ="application/json"):表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/json”时即可匹配;
@RequestMapping(value ="/produces", produces ="application/xml"):表示将功能处理方法将生产xml格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/xml”时即可匹配。
此种方式相对使用@RequestMapping的“headers = "Accept=application/json"”更能表明你的目的。
服务器控制器代码详解cn.javass.chapter6.web.controller.consumesproduces.ProducesController;
客户端代码类似于之前的Content-Type中的客户端,详见ProducesController.java代码。
当你有如下Accept头:
①Accept:text/html,application/xml,application/json
将按照如下顺序进行produces的匹配 ①text/html ②application/xml ③application/json
②Accept:application/xml;q=0.5,application/json;q=0.9,text/html
将按照如下顺序进行produces的匹配 ①text/html ②application/json ③application/xml
q参数为媒体类型的质量因子,越大则优先权越高(从0到1)
③Accept:*/*,text/*,text/html
将按照如下顺序进行produces的匹配 ①text/html ②text/* ③*/*
即匹配规则为:最明确的优先匹配。
代码详见ProducesPrecedenceController1、ProducesPrecedenceController2、ProducesPrecedenceController3。
Accept详细信息,请参考http://tools.ietf.org/html/rfc2616#section-14.1。
三、窄化时是覆盖 而 非继承
如类级别的映射为@RequestMapping(value="/narrow", produces="text/html"),方法级别的为@RequestMapping(produces="application/xml"),此时方法级别的映射将覆盖类级别的,因此请求头“Accept:application/xml”是成功的,而“text/html”将报406错误码,表示不支持的请求媒体类型。
详见cn.javass.chapter6.web.controller.consumesproduces.NarrowController。
只有生产者/消费者 模式 是 覆盖,其他的使用方法是继承,如headers、params等都是继承。
四、组合使用是“或”的关系
@RequestMapping(produces={"text/html","application/json"}):将匹配“Accept:text/html”或“Accept:application/json”。
五、问题
消费的数据,如JSON数据、XML数据都是由我们读取请求的InputStream并根据需要自己转换为相应的模型数据,比较麻烦;
生产的数据,如JSON数据、XML数据都是由我们自己先把模型数据转换为json/xml等数据,然后输出响应流,也是比较麻烦的。
Spring提供了一组注解(@RequestBody、@ResponseBody
)和一组转换类(HttpMessageConverter
)来完成我们遇到的问题,详见6.6.8节。
分享到:
相关推荐
SpringMVC可以轻松构建RESTful服务,通过HTTP方法(GET、POST、PUT、DELETE等)和@RequestMapping的produces和consumes属性,可以创建符合REST原则的API。 12. **测试**: SpringMVC提供了MockMvc工具,允许在不...
例如,我们可以在 Controller 中使用 `@RequestMapping` 注解,并添加 `produces` 属性来指定字符编码: ```java @RequestMapping(value = "/hello", produces = "text/html;charset=UTF-8") public String hello()...
### SpringMVC常用注解详解 #### 1. @Controller 注解 - **定义与作用**:`@Controller` 是一个用于标记一个类为 SpringMVC 控制器的注解。它表明该类的主要职责是处理来自 DispatcherServlet 的 HTTP 请求,并...
接下来,我们将详细讨论`@RequestMapping`的六个属性及其用法。 一、属性详解 1. `value` 和 `method` - `value`: 这个属性用于定义请求的实际URL。它可以是简单的字符串,也可以是URI模板模式,如`/{variable}`...
这些注解可以帮助控制哪些属性应该被包含在JSON中,哪些应该被忽略,以及属性的命名规则等。 例如,假设我们有一个`User`类: ```java public class User { @JsonProperty("id") private Long id; @...
如果需要自定义视图解析,可以使用`@RequestMapping`的`produces`属性指定内容类型,或者配置`ViewResolver`。 **SpringMVC的其他注解** 除了上面介绍的基本注解,SpringMVC还提供了很多其他注解,如`@PostMapping...
`@RequestMapping`中的`produces`属性可用于指定响应的MIME类型,从而选择适当的视图技术,如JSP、FreeMarker或Thymeleaf。 8. **视图渲染**: 视图对象(如JSP页面)使用模型数据来渲染响应。开发者可以使用EL...
### SpringMVC九大常用注解详解 #### 一、@Controller **定义**: `@Controller` 注解是用来标记一个类作为控制器(Controller)组件,在Spring MVC框架中扮演着请求处理者的角色。 **作用**: 通过这个注解,可以将...
- `produces`: 指定响应的 Content-Type 类型。 - `params`: 请求必须包含特定参数时才执行方法。 - `headers`: 请求必须包含特定头部时才执行方法。 3. **@RequestParam** `@RequestParam` 用于从请求参数中...
- **生产者、消费者请求限定**:使用 `produces` 和 `consumes` 属性指定处理的媒体类型。 - **数据绑定**: - **自动绑定**:Spring 自动将请求参数与方法参数进行匹配。 - **类型转换**:自动进行数据类型的...
4. **内容协商**:这个特性允许服务器根据客户端的偏好返回不同的格式,比如 JSON 或 XML,可以通过 `@RequestMapping` 注解的 `produces` 和 `consumes` 属性来指定。 5. **MVC 视图解析**:Spring MVC 3.0 引入了...
5. **内容协商**: 允许服务器根据客户端的能力返回不同格式的数据,如JSON、XML等,通过`@RequestMapping`的produces属性实现。 6. **国际化支持**: `MessageSource`接口提供国际化消息管理,使应用能适应不同地区...
视图名称可以通过 `ModelAndView` 的 `setViewName()` 方法设置,或者在 `@RequestMapping` 中使用 `produces` 属性指定响应类型。 8. **服务层(Service)**:SpringMVC 可以与 Service 层配合使用,实现业务逻辑...
SpringMVC支持创建RESTful风格的API,通过@RequestMapping注解的produces和consumes属性,我们可以定义处理特定的HTTP方法和内容类型。 10. **视图技术的选择** SpringMVC兼容多种视图技术,如JSP、FreeMarker、...
Spring MVC 提供了很好的支持来创建 RESTful 飓风风格的 API,可以通过 `@RequestMapping` 注解的 `produces` 和 `consumes` 属性控制响应和接受的媒体类型。 11. **上传和下载** Spring MVC 提供了处理文件上传...
8. **RESTful支持(REST Support)**: 通过`@RequestMapping`的`produces`和`consumes`属性,SpringMvc 3可以轻松创建符合REST原则的Web服务,支持XML、JSON等多种数据格式的交换。 9. **模板引擎集成(Template ...
5. **RESTful 支持**:通过 `@RequestMapping` 注解的 `produces` 和 `consumes` 属性,Spring MVC 3 支持创建 RESTful 风格的服务,方便构建 Web API。 6. **MVC 注解配置**:`@EnableWebMvc` 和 `@Configuration`...
3. 错误页面配置:在SpringMVC的配置中,可以通过`<error-page>`标签定义不同类型的错误代码对应的错误页面,或者通过`@ExceptionHandler`的`produces`属性设置响应的媒体类型,以返回JSON、XML等格式的错误信息。...
Spring MVC 支持构建 RESTful 风格的 Web 服务,利用 @RequestMapping 注解的不同属性,如 method、produces、consumes,可以实现不同 HTTP 方法和媒体类型的支持。 9. **异常处理**: 可以通过 @...