controller入参方式
一,普通方式-请求参数名和Controller方法的参数一致
例如:localhost:8888/admin?name=zs&pwd=222
public String addUser(String name, String pwd){
logger.debug("name:" + name + ",pwd:" + pwd);
return "index";
}
二,对象方式-请求参数名和Controller方法中的对象的参数一致
例如:localhost:8888/admin?name=zs&pwd=222
public String addUser(User user){
System.out.println(user);
return "index";
}
public class User{
private String name;
private String pwd;
}
注:传入的参数名必须和对象属性名完全一致(包括大小写),否则默认为null值
三,自定义方法参数名-当请求参数名与方法参数名不一致时
例如:例如:localhost:8888/admin?name=zs&pwd=222
@GetMapping("/aaa")
public String addUser(@RequestParam("name") String userName,@RequestParam("pwd") String passWord){
return "index";
}
四,@PathVariable获取路径中的参数接收
例如:http://122.51.83.185:9099/blog/zs/22
@GetMapping("/blog/{name}/{id}")
public String addUser(@PathVariable("name") String name, @PathVariable("id") int id){
return "index";
}
五,@RequestBody-JSON方式接收
如果使用json方式提交,第二种直接用对象方式接收会报错
/**
* RequestBody-JSON 对象方式
* @param user
* @return
*/
@RequestMapping(value = "/addByListJSON", produces = {"application/json;charset=UTF-8"})
public String addUserByObjectJSON(@RequestBody User user){
logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd());
return "";
}
/**
* RequestBody-JSON List对象方式
* @param user
* @return
*/
@RequestMapping(value = "/addByListJSON", produces = {"application/json;charset=UTF-8"})
public String addUsersByListJSON(@RequestBody List<User> users){
if(null != users){
for(User user : users){
sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}");
}
}
}
/**
* RequestBody-JSON Map方式
* @param user
* @return
*/
@RequestMapping(value = "/addByMapJSON", produces = {"application/json;charset=UTF-8"})
public String addUsersByMapJSON(@RequestBody Map<String, User> users){
}
@RequestBody
@RequestBody主要用来接收前端传递给后端的json数据(请求体中的数据),GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交
在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
六,附加-@Valid校验
1,使用@Valid对参数进行校验
在使用对象进行参数接收时,我们可以对参数进行校验,假设我们需要用户输入的密码是整数型且在000000至999999之间的数值,我们可以对属性passWord加上如下注解:
@Max(value = 999999,message = "超过最大数值")
@Min(value = 000000,message = "密码设定不正确")
private String passWord;
这里举的列子并不十分合适,请注意。我们只是针对表单验证进行讲解,在实际开发处理中要选择合适的操作。message是反回的提示默认信息。
在controller中我们改写一下,将返回值设为String,让我们可以看到报错信息。
然后我们给对象加入@Valid注解,并在参数中加入BindingResult来获取错误信息。在逻辑处理中我们判断BindingResult知否含有错误信息,如果有错误信息,则直接返回错误信息。
@PostMapping("/createUser2")
public String createUser2(@Valid UserInfo userInfo, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
}
userService.createUser(userInfo.getTel(),userInfo.getPassWord());
return "OK";
}