您的位置:首页 > 编程语言 > Java开发

spring boot 基础学习 - 请求参数映射与参数j校验

2018-01-21 17:32 1081 查看
spring boot 支持多种类型的请求参数映射

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风格编程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: