springboot2.0.4参数
2018-7-25
1 参数接收
建议所有参数全部以字符串形式传递,到后台再进行转换;
1.1 表单参数
springboot接收前端页面参数时可以直接接收String和数值;不能直接添加日期对象LocalDate参数;而MySQL数据库的日期也可以直接使用字符串形式('2018-07-01','2017-07-01 10:11:11','2014-01-01T10:10:10','2014/01/10')所以可以使用string接收日期参数;
string类型的日期可以通过LocalDate.parse(string)转换成Localdate,但是日期格式需要是:2018-02-10类型;就是需要以横杠分割,而对于使用"/"分割的无法转换;需要手动转换;
1.2 json参数
springboot的请求中使用json传参数时,controller参数需要使用注解@requestbody;且添加此注解就无法接收表单参数;json参数是使用流处理的,所以json传参时,只能使用一个对象接参,具体详情见<2 多参数接收>;
如果只有一个string类型参数,使用json传参是不可以的;因为他会把整个json字符串作为参数;如下:
单个string参数时,都不会作为json类型解读;传参{"a":11}
接参:public String testParams(@RequestBody String a)
接到值是a={"a":11};并没有解读成json;
2 多参数接收
2.1,在springboot中当使用多个对象接收多个参数时,如果是表单参数key=velue类型,参数名称不能一样,并对应对象的属性值名称,既可以;如下:
public User addUser(User user,PagePam page){
return user;
}
综上所述,表单参数只要key唯一且相同即可;
2.2,如果传递的是json格式参数;那这样就不行了;json参数是使用流处理的,所以json传参时,只能使用一个对象接参,需要使用如下方式:
@Controller
public class TestController{
@RequestMapping("\test")
@ResponseBody
public RetureResult test(@RequestBody Param param){
return new ReturnResult();
}
}
class Param{//两个类属性见下方json字符串;
public User user;
public Page page;
}
将两个类封装成一个类;使用这一个类接收参数;注意两个类必须都是public修饰;这是传递参数格式为:
{"user":{
"name": "jam2",
"age": 1333,
"birth": "2018-07-01"
},
"page":{
"page": 1,
"pSize":122,
"total": 2222
}}
就可以了;
3 固定对象参数和随机参数同时通过json传递
当我们需要传递一些固定的对象参数和几个灵活配置参数时,可以使用如下方法:使用map接收散参,对象接收固定参数;
请求参数:aaa,bbb,user;
{
"map": {"aaa":111,"bbb":222},
"user": {
"age": 0,
"birth": "string",
"name": "string"
}
}
接收参数:
public String testClassMap(@RequestBody PM pp) {
Map map=pp.map;
User user=pp.user;
return "";
}
定义一个参数类;可以放在controller类外面的同文件下;
class PM{
public User user;
public Map
public toString()......
}
接到参数:
{
"map": {"aaa":111,"bbb":222},
"user": {
"age": 0,
"birth": "string",
"name": "string"
}
}
4 使用map接收多个参数
使用map接收参数时,表单和json参数都可以接收;参数变化灵活,但是参数全部采用key=value形式;参数名称是由前端定的,可能后端和前端定义名称不同出现无效参数情况;这就要前后端订立严格规则了;参数的key和value都是字符串类型;
如果参数中key或者value包含对象类型,那么需要自己解析;这个非常难以处理,不建议使用;
public Map
return map;
}
参数:{ "name": "jam2", "age": 1333, "birth": "2018-07-01" ,"page":{ "cPage": 1, "pSize":122, "total": 2222 }}
接收到的参数:ARGS=[{name=jam2, age=1333, birth=2018-07-01, page={page=1, pSize=122, total=2222}}]
对于page这个值我们只能获取整个字符串:{page=1, pSize=122, total=2222}而不能直接获取内部的值,需要解析json才可以;
返回值:{ "name": "jam2", "age": 1333, "birth": "2018-07-01" ,"page":{ "page": 1, "pSize":122, "total": 2222 }}
综上,json参数必须使用@requestbody注解,且只能使用一个参数,并且不能是基本类型的参数;