Springboot 关于接收参数的各种方式

首先是本文涉及的传值的方式

1,get请求的query参数

2、表单提交的form-data参数

3、json格式的原生参数

Query参数

对于query参数是最为直接和简单的接收方式,我们只需要用java中的方法参数进行声明即可

//Query参数
@GetMapping("/getParameter")
public String getallgoods(String id){
    return id;
}
Form-data参数

Form-data表单数据是web端一种常用的数据提交方式,以POST方式提交,对于表单对象,Springboot也可以通过直接声明参数的方式调用即可

//Form-data参数
@GetMapping("/getParameter")
public String getallgoods(String title){
    return id;
}

也有时候,我们在前端并不是表单来收集数据,那么我们需要在前端进行包装成Form-data对象

changeuser() {
	//创建FormData对象
    var fd = new FormData()
	//在对象中设置属性
    fd.append("title",this,title)
	//将对象作为参数发往后端
    axios.post("/api/getParameter", fd).then(res => {
//成功后操作
    	alert(res.data);
    })
}
Json格式的原生参数

对于Json格式的则需要添加Springboot的注解帮助解析

首先是前端请求

changeuser() {
    //构建对象
	var Obj = {
        title:"test",
        prise:12
    }
	//将对象作为参数发往后端
    axios.post("/api/getParameter", Obj).then(res => {
	//成功后操作
    	alert(res.data);
    })
}

如果我们还是像之前一样使用普通参数来接收则会报错null

在后端中,有两种方式可以获得该对象

1、构建实体对象

我们需要新建一个实体类

Public Obj{
	String title;
    Integer prise;
    //get and set
    ……
}

然后将实体类作为装载对象

//JSON参数,实体类
@GetMapping("/getParameter")
public String getJson(@RequestBody Obj o){
    String title = o.gettitle();
    Integer prise = o.getprise();
    return title+"and"+prise;
}
2、Map集合
//JSON参数,实体类
@GetMapping("/getParameter")
public ReturnObject getJsonByMap(@RequestBody Map<String,Object> map){
    String title = map.get("title");
    Integer prise = map.get("prise");
    return title+"and"+prise;
}

这里将JSON中的每一个值都映射进了Map中,我们可以直接通过调用Map的获取值的方式得到其值

第一种方法有一个很显著的缺点就是每当我们需要构建一个请求接口就需要构建对应的实体类,但是优点也很直接,直接使用@RequestBody注解就能让所有的json参数成为一个对象,可以直接使用,而使用Map集合方法中,好处是我们不需要前置准备一个实体类,不用新建一个接口就新建一个实体类,但是也因此,我们需要去规定好,前端传回的json字段的键。

总结

三种传值方式中,最简单的莫过于是Query方式,可以直接在方法中声明调用,无需配置,但是很多情况下都不能使用简单的Query方式,如传输隐私、密码等,Form-data表单是一个不错的选择,但是在前端需要进行包装为表单对象,而相对的前端一般来说最为方便的还是传输JSON格式的数据,所以,当数据较多的时候还是采用JSON格式的解析吧,当数据量较少,我们可以使用Map集合,可以很方便的进行获取,当数据量较大时,我们则可以使用创建实体类的方式,来简化我们后续的操作。

实体类构建麻烦,使用方便,而Map集合构建简单但是使用麻烦,因此,在合适的情况挑选出最合适的才是正确的。

如有错误,还望指出