SpringMVC请求和视图配置

SpringMVC以简单高效著称,它可以处理多种数据请求格式和响应多种视图,只需要几个简单的配置即可,具体配置如下。

首先,在SpringMVC的servlet配置文件中添加标签:。该标签是注解驱动的意思。其实SpringMVC内置了一些对象视图转换器类,包括xml、json、string等。当声明该标签时,表示使用SpringMVC内置的一系列默认转换器。那么SpringMVC到底怎么区分要使用xml还是json转换器呢?这就是 @RequestMapping 注解中consumes和produces两个属性的作用所在了。简单的说,SpringMVC根据consumes的值,选择合适的转换器来解析请求参数为类对象,根据produces的值,选择合适的转换器来将类对象转换成返回的视图数据格式(json、xml等),这大概就是“注解驱动”的意义吧。

一、请求数据格式配置
1. 请求数据格式为表单格式,即 key=value,那么
1.1. http请求头部信息包含: “Content-Type:application/x-www-form-urlencoded”
1.2. 数据格式为 key1=value1&key2=value2…
1.3. SpringMVC的controller方法中请求参数注解配置为 @RequestParam Map
这种情况下,SpringMVC会将请求参数以键值对的形式保存到配置的 Map中,使用的时候只需要按key取值即可,示例如下,
请求头部信息:
SpringMVC请求和视图配置
请求参数:
SpringMVC请求和视图配置
SpringMVC配置和打印结果如下:
SpringMVC请求和视图配置
2. 请求数据格式为json格式,那么
2.1. http请求头部信息包含:“Content-Type:application/json”
2.2. 数据格式为json格式
2.3. SpringMVC的controller方法中请求参数配置为 @RequestBody Object object,其中 Object为请求数据对应的java类
这种情况下,SpringMVC会将请求参数转换成指定的 Object类的一个实例对象,并传递给controller方法的参数,使用的时候只需要调用get方法即可,示例如下,
请求头部信息:
SpringMVC请求和视图配置
请求参数:
SpringMVC请求和视图配置
SpringMVC配置和打印验证如下:
SpringMVC请求和视图配置

  1. 请求数据格式为xml格式,那么
    3.1. http请求头部信息包含:“Content-Type:application/xml”
    3.2. 数据格式为xml格式
    3.3. SpringMVC的controller方法中参数配置为 @RequestBody Object object,其中 Object为请求数据对应的java类。
    3.4. object类需要使用 jaxb 注解。因为SpringMVC是使用 jaxb 规范进行xml和对象之间的转化的。
    这种情况下,SpringMVC会将请求参数转换成指定的 Object类的一个实例对象,并传递给controller方法的参数,使用的时候只需要get即可,示例如下,
    请求头部信息:
    SpringMVC请求和视图配置
    请求参数:
    SpringMVC请求和视图配置
    Object类注解:
    SpringMVC请求和视图配置
    SpringMVC配置和打印验证:
    SpringMVC请求和视图配置

二、响应视图配置
1. 响应一个页面
1.1. 这种情况下直接在controller方法中返回页面的web全路径即可,所谓web全路径,是指页面所在目录相对于web根目录之间的路径。SpringMVC会自动根据该路径找到页面响应给客户端。示例如下:
jsp源码页面:
SpringMVC请求和视图配置
SpringMVC写法:
SpringMVC请求和视图配置
抓包响应内容:
SpringMVC请求和视图配置
1.2. 当然,一般来讲我们的页面目录可能有几层,如果每一个方法都写全路径未免有些多余,那么SpringMVC为我们考虑到了这个问题,只需要增加一个配置,就可以省去路径前后相同的部分。配置方法如下,
在SpringMVC的servlet配置文件中添加:
SpringMVC请求和视图配置
那么这样配置之后,我们的controller方法返回值只需要写路径中区别于其它路径不同的部分即可,但是需要保证prefix+return值+suffix拼接的结果是一个有效的路径,注意文件目录分隔符‘/’
配置了路径前后缀的controller写法:
SpringMVC请求和视图配置
抓包的返回结果内容跟前面完全一致,就不贴图了。

2 . 响应json数据
2.1. 对controller方法使用注解 @ResponseBody
2.2. 对controller方法的 @RequestMapping 注解的produces属性配置 “application/json”
2.3. 设置controller方法的返回值为 Object 类
这种情况下,SpringMVC会将方法返回的Object类对象解析成json对象的字符串并响应给客户端,示例如下,
SpringMVC写法:
SpringMVC请求和视图配置
抓包结果:
SpringMVC请求和视图配置

3 . 响应xml数据
3.1. 对controller方法使用注解 @ResponseBody
3.2. 对controller方法的 @RequestMapping 注解的produces属性配置 “application/xml”
3.3. 设置controller方法的返回值类型为 Object类
3.4. 对Object返回值类型使用 jaxb注解,原因同上述请求xml数据
这种情况下,SpringMVC会将方法返回的Object类对象解析成xml对象的字符串并响应给客户端,示例如下,
SpringMVC写法:
SpringMVC请求和视图配置
抓包结果:
SpringMVC请求和视图配置

上述的都是一些正常情况下的配置方式,不过大家可能注意到,上述的请求参数配置方法中,都没有出现consumes的配置,那么就牵涉到一些异常情况,SpringMVC是怎么处理的。异常情况包括:
①请求的时候Content-Type不传,SpringMVC怎么处理?
②请求的时候consumes省略?
③Content-Type与consumes配置的值不一致?
④produces省略呢?
其实,对于这些情况,SpringMVC有些会报错,有些会有优先级策略,具体的可以自己去尝试。总之,对于所有的controller,显示声明其请求和响应的数据格式,并与实际的数据格式保持一致,这样就能万无一失了。