springboot2.0.4参数

springboot2.0.4参数

[email protected]

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 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 mapParam(@RequestBody Map 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注解,且只能使用一个参数,并且不能是基本类型的参数;

 

 

 

你可能感兴趣的:(springboot2.0.4,个人笔记)