JSR303数据效验

JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。
在这里插入图片描述

基本应用

一、引入依赖

<dependency>
	 <groupId>org.springframework.boot</groupId>
	 <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

二、给参数对象添加校验注解

@Data
public class User {
    
    private Integer id;
    @NotBlank(message = "用户名不能为空")
    private String username;
    @Pattern(regexp = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$", message = "密码必须为8~16个字母和数字组合")
    private String password;
    @Email
    private String email;
    private Integer gender;
}

三、Controller 中需要校验的参数Bean前添加 @Valid 开启校验功能,紧跟在校验的Bean后添加一个BindingResult,BindingResult封装了前面Bean的校验结果。

@RestController
@RequestMapping("/user")
public class UserController {

    @PostMapping("")
    public Result save (@Valid User user , BindingResult bindingResult)  {
        if (bindingResult.hasErrors()) {
            Map<String , String> map = new HashMap<>();
            bindingResult.getFieldErrors().forEach( (item) -> {
                String message = item.getDefaultMessage();
                String field = item.getField();
                map.put( field , message );
            } );
            return Result.build( 400 , "非法参数 !" , map);
        }
        return Result.ok();
    }

}

@Valid 不能写在方法上,要写在参数前,同时绑定对象时需要用到@RequestBody ,否则参数不能自动绑定到vo类,
BindingResult result 要紧随其后,作为绑定的结果,使用hasErrors 方法判断是否绑定成功, result.getFieldError().getDefaultMessage(),输出绑定失败的错误信息(vo类中,注解括号里的message信息)

四、@Validated:可以用在类、方法和方法参数上。 可以分组

@NotEmpty(groups={First.class})  
@Size(min=3,max=8,groups={Second.class})  
private String name; 
@Controller  
public class FirstController {  
      
    @RequestMapping("/addPeople")  
    //不需验证ID  
    public @ResponseBody String addPeople(@Validated People p,BindingResult result)  
    {  
        System.out.println("people's ID:" + p.getId());  
        if(result.hasErrors())  
        {  
            return "0";  
        }  
        return "1";  
    }  
      
    @RequestMapping("/updatePeople")  
    //需要验证ID  
    public @ResponseBody String updatePeople(@Validated({First.class}) People p,BindingResult result)  
    {  
        System.out.println("people's ID:" + p.getId());  
        if(result.hasErrors())  
        {  
            return "0";  
        }  
        return "1";  
    }  
} 

https://blog.csdn.net/larger5/article/details/79744569?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160475038619724842931647%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160475038619724842931647&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-6-79744569.pc_first_rank_v2_rank_v28&utm_term=springboot+JSR303&spm=1018.2118.3001.4449

https://www.cnblogs.com/applesnt/p/12676373.html
https://www.jianshu.com/p/1dff31a1649d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

德玛西亚!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值