SpringMVC

旧时模样 提交于 2020-01-16 11:29:20

控制器接收各类请求参数
RESTful 风格,它往往会将参数写入到请求路径中,而不是以HTTP 请求参数传递,也有些应用需要传递的是JSON

接收普通请求参数
1.通过参数名称和 HTTP 请求参数的名称保持一致来获取参数,如果不一致是没法获取到的,这样的方式允许参数为空。

2.当HTTP请求参数过多的情况下,可以考虑虑使用一个 POJO 来管理这些参数,SpringMVC也有映射 POJO 能力,POJO 的属性需和 HTTP 参数一一对应

使用@RequestParam 注解获取参数
@RequestParam获取一个Http请求的参数,为其重新绑定规则,默认的情况下该参数不能为空,如果为空则系统会抛出异常。如果希望允许它为空,那么要修改它的配置项required=false

使用 URL 传递参数(符合RESTFUL风格)
需要@RequestMapping和PathVariable 两个注解共同协作完成
@RequestMapping ("/getRole /{id}")
/{id}:代表处理器需要接受一个由 URL 组成的参数,且参数名称为 id,id值代表的是角色编号,只是它在 URL 中传递
(@PathVariable (“id”) Long id):表示将获取这个在@RequestMapping 中定义名称为 id 的参数,这样就可以在方法内获取这个参数

传递 JSON 参数
有时候参数的传递还需要更多的参数,就需要依靠json传递
首先传递的 JSON 数据需要和对应参数的 POJO 保持一致。其次 在请求的时候需要告知请求的参数类型为 JSON ,这是不能缺少的。最后 ,传递的参数是一个字符串,而不是一个JSON ,所以这里用了 JSON.stringify()方法将 JSON 数据转换为字符串
通过@RequestBody接受传递的json数据

接收列表数据和表单序列化
如果要一次性删除多个角色,那么肯定是想将一个角色编号的数组传递给后台,或需要新增角色,甚至同时新增多个角色。无论如何,这都需要用到 Java的集合或者数组去保存对应的参数
(@RequestBody ListidList) :表示要求Spring MVC 将传递过来的 JSON 数组数据 转换为对应的 Java 集合类型或者数组(Long[])

通过表单序列化也可以将表单数据转换为字符串传递给后台
在这里插入图片描述
由于序列化参数的传递规则变为了 roleName=xxx&&note=xxx,所以使用接收普通参数的方法即可

保存并获取属性参数
有时候我们会暂存数据到HTTP 的Request 对象或者 Session对象中,在开发控制器的时候有时也需要保存对应的数据到这些对象中去,或者从中获取数据
Spring MVC 给予了支持,它的主要注解有3个:@RquestAttribute,@SessionAttribute, @SessionAttributes
1.@RequestAttribute:获取 HTTP 的请求(request )对象属性值,用来传递给控制器的参数
2.@SessionAttribute:在HTTP 会话(Session )对象属性值中,用来传递给控制器的参数
3.@SessionAttributes:可以给它配置一个字符串数组,这个数组对应的是数据模型对应的键值对,然后将这些键值对保存到 Session 中

注解@RequestAttribute
主要的作用是从 HTTP的request 对象中取出请求属性,只是它的范围周期是在一次请求中存在,默认不能为空,否则系统会抛出异常,允许为空:required=false
jsp:request.setAttribute (“id”, lL) ;
controller:( @RequestAttribute (“id”) Long id)

注解@SessionAttribute 和注解@SessionAttributes
这两个注解和 HTTP 的会话对象有 ,在浏览器和服务器保持联系的时候 HTTP 会创建一个会话对象,这样可以让我们在和服务器会话期间(请注意这个时间范围)通过它读/写会话对象的属性,缓存一定数据信息

注解@SessionAttribute
读取Session属性,默认不能为空,否则系统会抛出异常,允许为空:required=false
jsp:session.setAttribute (“id”, lL);
controller:(@SessionAttribute (" id ") Long id)

注解@SessionAttributes
控制器中可以使用注解@SessionAttributes 来设置对应的键值对,不过这个注解只能对类进行标注,不能对方法或者参数注解,它可以配置属性名称或者属性类型
//可以配置数据模型的名称和类型,两者取或关系
@SessionAttributes(names ={“id”}, types= { Role.class })

注解@CookieValue 和注解@RequestHeader
这两个注解都很明确,就是从 Cookie和HTTP 请求头获取对应的请求信息
@RequestHeader(value=“User-Agent”, required = false, defaultValue =“attribute”) String userAgent
@CookieValue(value =“JSESSIONID”,required = true, defaultValue=“MyJsessionid”) String jsessionId

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!