springboot 2.1 Validated验证框架特殊点

转载自:https://blog.csdn.net/github_36086968/article/details/103115128

Hibernate Validator在JSR 303校验框架中提供了很多注解类。此Hibernate与ORM框架无关,只是一个实现了JSR-303规范的验证框架。
@Validated可以看作是@Valid的加强注解,@Valid能只能作用在方法、属性、构造、参数上,而@Validated可以作用在类上。

@Validated注解作用在控制类上,会将类中的所有方法都开启参数校验
注解标注在类上:
只有作用在类上,GET方式的请求才会校验。
标注在方法上
单独作用在请求方法上,只有POST请求校验生效(针对集合的非空验证这种情况不生效),GET请求校验不会生效。

1.针对get/post 请求 集合非空的验证

需要在控制层类上添加@Validated注解,在请求方法的对应的集合上带上@Valid注解,非空使用@NotEmpty 注解
如下

@RequestMapping("/xxx/xxxx")
@Validated
public class BqFyglController {
………………
 @PostMapping("/xxxx")
 public ServiceBaseResult getBqFyglInfos( @Valid @NotEmpty(message = "参数不能为空!") List<BqParam> BqParams) {
        return bqfyglservice.getBqFyglInfos(BqParams);
    }
…………

此时BqParam 方法里的属性也能验证

2.get请求基本属性

@Validated,用在类、方法、属性上都生效

@Valid 单独标注也生效

public ServiceBaseResult medicalAdviceHystrory(@RequestParam("yzxhs") @Valid  @NotEmpty(message = "参数yzxhList 不能为空1") List<String> yzxhList
            , @NotNull(message = "参数yzxhList 不能为空2")String syxh
            , @NotNull(message = "参数不能为空") String jgdm){
        return zyYzzxService.queryMedicalAdviceHystrory(yzxhList,syxh,jgdm);
3.真对post 请求验证异常报handleConstraintViolationException 错误的全局处理
 /**
     * @Title: handleConstraintViolationException
     * @Description: Post方式参数验证异常
     * @author chenhx
     * @date 2019-11-17 16:33:49
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ResultVO handleConstraintViolationException(MethodArgumentNotValidException ex) throws IOException {
        //获取所有错误异常
        List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
        //只返回第一个信息
        ObjectError error = allErrors.get(0);
        //返回自定义信息格式
        return new ResultVO(-1,error.getDefaultMessage());
    }
————————————————

或者统计所有的错误

if(e instanceof ConstraintViolationException ){
            List<ConstraintViolation>  list =((ConstraintViolationException) e ).getConstraintViolations().stream().collect(Collectors.toList());
            String error=  list.stream().map(t->t.getMessageTemplate()).collect(Collectors.joining(","));
            message.setCode(SystemConstants.FAIL_CODE).setMessage(error);
            return message;```


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值