spring boot 基础学习 - 请求参数映射与参数j校验
2018-01-21 17:32
1081 查看
spring boot 支持多种类型的请求参数映射
1.简单数据的映射
简单数据我们只需要给handler添加相应的形参,保证形参名称和页面请求参数的名称一致,spring 就会回自动的帮我们将请求参数进行格式装换并封装到形参中:
handler代码:
上面这种方法和struts参数映射一样,要求页面提交的参数名称个形参名称完全一样,才能真确封装,但是有时候为了业务需求或其他的原因我们没办法保证两者一致,那该怎么办呢?这个时候我们可以使用@RequestPrarm注解来实现,如下,jsp页面不改变,但是形参名称改变:
2.复杂类型参数的映射:
上面的参数映射方式有个很明显的弊端,那就是一旦提交参数变多,handler代码就变得非常难看,参数处理起来也比较费事,在spring中我们也可以使用简单对象(pojo类)来对参数进行封装,
我们只需要定义一个pojo类,该类中定义字段
4000
名与提交的参数名一致并提供相应的getter,spring 一样可以对参数进行正确的封装,当然,你也可以在handler同时使用简单参数和pojo对参数进行封装,这个时候,当pojo中有属性与形参属性名一致时,spring 会同时对这两个位置进行相同的封装,当然,除了特殊需要,个人不建议这么做。
jsp页面不变,pojo代码如下:
对象也可以封装了,那么接下来我们看看数组和list集合类型的封装。
3.通过形参直接接受数组或者集合:
首先我们在jsp中添加一段代码:
这里要想直接通过形参接受数组或者list的话,无论前台提交的参数名称与形参名称是否一致都必须使用@RequestParam注解,并且设置value值为页面参数名称。佛则就会报错!不知道为什么百度好多结果都说不能直接封装...还需要在页面修改是什么的...
List也是一样的操作!
4,将页面数组参数疯转到pojo对象:
这个就更简单了,直接在pojo中添加成员变量,添加setter即可:
5,将json格式的字符串封装到对象中
通常我们发送ajax请求都会使用$.post,或者$.get,但是如果我们要使用spring boot来解析提交的json数据就不能用这两种方式,而必须采用$.ajax,应为前面两种方式提交数据时,数据的contenttype为:application/x-www-form-urlencoded,而是spring并不会将这种类型的数据当成json数据解析,而是只会把contentType为application/json;charset=utf-8的数据当做json数据来解析,所以只能用$.ajax方式,在提交时手动指定ContentType;
而后台handler,默认将数据当做application/x-www-form-urlencoded 来解析,所以要想让spring将数据已json格式解析,需要在用于接收数据的形参前面加上一个注解:@RequestBody,当spring发现这个注解时,就会将对应的数据使用json解析器转换并封装.
6.RestFul请求参数的封装
近几年,restFul风格也慢慢的流行起来了,RestFUL最大的特点就是,对于不同的Http请求方式定义了不同的业务功能,而且url层级分明,直观的表达了请求的目的!参数也比较特别:有些参数是单独的出想在url,而不像传统的参数以键值对的形式提交,接收这种形式的参数主要用到一个注解:@PathVariable,代码如下:
// handler 代码
@RequestMapping("/paramstest/{id}/{name}")
public String simpleparam(@PathVariable(value="id") Integer id,@PathVariable(value="name") String name) {
System.out.println(id);
System.out.println(name);
return "paramstest";
}请求路径:http://localhost:9020/start//paramstest/11/bug4j
结果:
当然,我们还可以在@requestMapping中指定handler接收的请求方式,下回专门写篇关于spring boot 的restFul风格编程
1.简单数据的映射
简单数据我们只需要给handler添加相应的形参,保证形参名称和页面请求参数的名称一致,spring 就会回自动的帮我们将请求参数进行格式装换并封装到形参中:
handler代码:
@RequestMapping("paramstest") public String simpleparam(Integer id,String username,Boolean signin) { System.out.println("id ---> " + id); System.out.println("username ---> " + username); System.out.println("signin ---> " + signin); return "paramstest"; }jsp代码:
<form action="./paramstest.action" method="GET"> String类型:<input type="text" name="username" /><br /> int类型:<input type="text" name="id" ><br /> 布尔类型:<input type="text" name="signin" /><br /> <input type="submit" value="提交" /><br /> </form>浏览器提交后控制台结果:
上面这种方法和struts参数映射一样,要求页面提交的参数名称个形参名称完全一样,才能真确封装,但是有时候为了业务需求或其他的原因我们没办法保证两者一致,那该怎么办呢?这个时候我们可以使用@RequestPrarm注解来实现,如下,jsp页面不改变,但是形参名称改变:
@RequestMapping("paramstest") public String simpleparam(@RequestParam("id") Integer uid,@RequestParam("username") String name,@RequestParam("signin") Boolean in) { System.out.println("id ---> " + uid); System.out.println("username ---> " + name); System.out.println("signin ---> " + in); return "paramstest"; }当页面提交时,后台任然能够正确的获取到请求参数:
2.复杂类型参数的映射:
上面的参数映射方式有个很明显的弊端,那就是一旦提交参数变多,handler代码就变得非常难看,参数处理起来也比较费事,在spring中我们也可以使用简单对象(pojo类)来对参数进行封装,
我们只需要定义一个pojo类,该类中定义字段
4000
名与提交的参数名一致并提供相应的getter,spring 一样可以对参数进行正确的封装,当然,你也可以在handler同时使用简单参数和pojo对参数进行封装,这个时候,当pojo中有属性与形参属性名一致时,spring 会同时对这两个位置进行相同的封装,当然,除了特殊需要,个人不建议这么做。
jsp页面不变,pojo代码如下:
// pojo代码 public class PrarmsPojo { private Integer id; private String username; private Boolean signin; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Boolean getSignin() { return signin; } public void setSignin(Boolean signin) { this.signin = signin; } }handler代码
@RequestMapping("paramstest") public String simpleparam(ParamsPojo pojo) { System.out.println("id ---> " + pojo.getId()); System.out.println("username ---> " + pojo.getUsername()); System.out.println("signin ---> " + pojo.getSignin()); return "paramstest"; }结果:
对象也可以封装了,那么接下来我们看看数组和list集合类型的封装。
3.通过形参直接接受数组或者集合:
首先我们在jsp中添加一段代码:
list数据类型:<br /> 吃:<input type="checkbox" name="hobby" value="吃"> 喝:<input type="checkbox" name="hobby" value="喝"> 玩:<input type="checkbox" name="hobby" value="玩"> 乐:<input type="checkbox" name="hobby" value="乐"> 敲代码:<input type="checkbox" name="hobby" value="敲代码"><br />
这里要想直接通过形参接受数组或者list的话,无论前台提交的参数名称与形参名称是否一致都必须使用@RequestParam注解,并且设置value值为页面参数名称。佛则就会报错!不知道为什么百度好多结果都说不能直接封装...还需要在页面修改是什么的...
// handler代码 @RequestMapping("paramstest") public String paramstest(@RequestParam("hobby") Integer[] hobby) { System.out.println(Arrays.toString(hobby)); return "index"; }结果:
List也是一样的操作!
4,将页面数组参数疯转到pojo对象:
这个就更简单了,直接在pojo中添加成员变量,添加setter即可:
// handler代码 @RequestMapping("paramstest") public String paramstest(PrarmsPojo pojo) { System.out.println(pojo.gethobby()); return "index"; }
5,将json格式的字符串封装到对象中
通常我们发送ajax请求都会使用$.post,或者$.get,但是如果我们要使用spring boot来解析提交的json数据就不能用这两种方式,而必须采用$.ajax,应为前面两种方式提交数据时,数据的contenttype为:application/x-www-form-urlencoded,而是spring并不会将这种类型的数据当成json数据解析,而是只会把contentType为application/json;charset=utf-8的数据当做json数据来解析,所以只能用$.ajax方式,在提交时手动指定ContentType;
而后台handler,默认将数据当做application/x-www-form-urlencoded 来解析,所以要想让spring将数据已json格式解析,需要在用于接收数据的形参前面加上一个注解:@RequestBody,当spring发现这个注解时,就会将对应的数据使用json解析器转换并封装.
// jsp部分代码 function jsonTest() { $.ajax({ url : "./paramstest.action", type : "POST", contentType:"application/json;charset=utf-8", data : '{"hobby":["吃","喝","玩"],"id":1,"username":"bug4j的博客"}', success : function(data) { alert("成功"); }, error : function() { alert("失败"); } }); }
// handler 代码 @RequestMapping("paramstest") public String simpleparam(@RequestBody ParamsPojo pojo) { System.out.println(pojo.getHobby()); return "paramstest"; }结果:
6.RestFul请求参数的封装
近几年,restFul风格也慢慢的流行起来了,RestFUL最大的特点就是,对于不同的Http请求方式定义了不同的业务功能,而且url层级分明,直观的表达了请求的目的!参数也比较特别:有些参数是单独的出想在url,而不像传统的参数以键值对的形式提交,接收这种形式的参数主要用到一个注解:@PathVariable,代码如下:
// handler 代码
@RequestMapping("/paramstest/{id}/{name}")
public String simpleparam(@PathVariable(value="id") Integer id,@PathVariable(value="name") String name) {
System.out.println(id);
System.out.println(name);
return "paramstest";
}请求路径:http://localhost:9020/start//paramstest/11/bug4j
结果:
当然,我们还可以在@requestMapping中指定handler接收的请求方式,下回专门写篇关于spring boot 的restFul风格编程
相关文章推荐
- SpringMVC学习(三)映射请求参数&请求参数
- SpringMVC学习(3):使用@PathVariable映射请求参数
- 【spring源码学习】springMVC之映射,拦截器解析,请求数据注入解析,DispatcherServlet执行过程
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- Python新手学习基础之函数-可变参数**
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- JAVA基础 day17 Collections工具类和Arrays工具类的使用 静态导入和可变参数的学习
- C++学习基础五之函数参数——形参
- Python新手学习基础之函数-可变参数**
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
- 关于Metasploit-学习笔记-基础命令以及参数
- 基础学习二(纹理映射)
- restlet2.1 学习笔记(三) 获取简单请求参数
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
- Scala基础学习之tuple(元组),Array(数组),Map(映射)
- 第六章、SpringMVC学习-注解式控制器详解(2)-SpringMVC3强大的请求映射规则详解
- mysql 基础-mysql对一条sql请求的权限校验流程
- python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹(*args与**kwargs)
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- 编程基础知识学习———C语言中可变参数的用法