SpringMVC值传递(前-后)

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";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值