spring boot 传参
spring boot 中的Controller或者RestController接收参数的方法是一样的。这章目标是对几种常用的传参都写个例子。
创建package: com.biboheart.demos.api,这个包里放置API接口的RestController
在com.biboheart.demos.api包中创建一个class: ParamController。这章的示例都在这个类中进行。
PathVariable
路径中包含参数,这种情况适合与传递一个不能为空值的参数。比如有些应用中,查询某个企业的数据,必须包含企业的编号,就可以在地址里接收这个编号。
在ParamController中增加一个函数PathParam
package com.biboheart.demos.api;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParamController {
@RequestMapping(value = "/demo/param/path/{sn}")
public String pathParam(@PathVariable String sn) {
return "接收到参数:" + sn;
}
}
路径中的参数通过{sn}接收值。
使用名称接收参数
使用名称接收参数比较直观,我用得比较多。不用注解。跟客户端传的参数同名就可以接收到。如下例子中的reqParam
package com.biboheart.demos.api;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParamController {
....
@RequestMapping(value = "/demo/param/req")
public String reqParam(String name, Integer age) {
return "接收到参数{name:" + name + ";age:" + age + "}";
}
}
也可以用get传参
使用对象接收参数
上面用参数名称接收值,只要与请求时的名称一致就能接收到参数值。如果需要传递的参数比较多的时候,就不适合一个一个参数写在函数里了,那样很不方便,也容易出错。可以把这些参数写到一个对象里接收。如下例子
创建一个package: com.biboheart.demos.model,创建一个类Person
package com.biboheart.demos.model;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class Person {
private String name;
private Integer age;
private Integer sex;
private String addres;
}
用Person对象接收参数
package com.biboheart.demos.api;
import com.biboheart.demos.model.Person;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParamController {
...
@RequestMapping(value = "/demo/param/model")
public String modelParam(Person person) {
return "接收到参数:" + person.toString();
}
}
虽然这样的方式也能接收get传参,但是因为需要传的参数多了,用get显得不太方便。这里就不测试GET方式请求了。
RequestBody
有的时候,需要接收JSON传参。比如某些服务的调用需要开发一个回调函数接收对方的回调并获得参数值为结果,对方回调回来的值是JSON格式的值,这时候就需要接收JSON传参数了。用RequestBody可以接收到JSON传值。
package com.biboheart.demos.api;
import com.biboheart.demos.model.Person;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ParamController {
...
@RequestMapping(value = "/demo/param/json")
public String jsonParam(@RequestBody Person person) {
return "接收到参数:" + person.toString();
}
}
需要JSON请求才能正确接到值