校验注解

 

1. 使用注解的必要性

在项目的接口定义中,需要对接口的入参做必要的校验,以拦截不合法的请求。简单粗暴的使用if else校验虽然可以达到目的,但是代码看起来会繁琐、冗余,不直观,所以推荐使用注解进行校验,使得代码简单、优雅、方便维护。可以使用现成的校验组件,也可以进行自定义的注解校验。本篇文章主要讲解spring提供的Validated校验使用方式。

注:自定义注解可参考另外一边博文:自定义校验注解

2. 使用方式

2.1 依赖包

<dependency>  
     <groupId>javax.validation</groupId>  
     <artifactId>validation-api</artifactId>  
     <version>1.1.0.Final</version>  
 </dependency>  
<dependency>  
     <groupId>org.hibernate</groupId>  
     <artifactId>hibernate-validator</artifactId>  
     <version>5.1.2.Final</version>  
</dependency>

注:引入spring之后,依赖包是不需要手动引入的

2.2 校验@RequestBody入参

@RestController
public class ValidController {
    /**
     * 1.对@RequestBody入参进行校验
     * 对于@RequestBody的入参,@Validated注解写在ValidController类上是不生效的,必须要写在参数前
     * 此处的@Validated可以替换为@Valid
     * @param user
     * @return
     */
    @PostMapping("/api/v1/user")
    public String createUser(@Validated @RequestBody User user, BindingResult result) {

        if (result.hasErrors()) {
            result.getAllErrors().forEach((error) -> {
                FieldError fieldError = (FieldError) error;
                // 属性
                String field = fieldError.getField();
                // 错误信息
                String message = fieldError.getDefaultMessage();
                System.out.println(field + ":" + message);
            });
            return "failed";
        }

        System.out.println(user.toString());
        return "create user success";
    }
}
@Data
public class User {
    @NotNull
    @Min(value = 1, message = "id 必须大于0")
    @Range(min = 1, max = 100, message = "id 值必须大于0且不大于100")
    private Long id;

    @NotBlank(message = "name 不能为空")
    private String name;

    //@Valid注解具有嵌套校验的功能
    //此处不能使用@Validated,@Validated不能用在类属性上
    @Valid
    private Dog dog;

    @Getter
    @Setter
    public static class Dog {
        @NotBlank(message = "dog name 不能为空")
        private String name;
    }
}

需要注意的点:

  1. 对于@RequestBody的入参,@Validated注解写在ValidController类上是不生效的,必须要写在参数前。可以替换为@Valid。
  2. 对于入参module中的嵌套类校验,只能使用@Valid,@Validated不可以注解在类的属性字段上;

2.2 校验@RequestParam|@PathVariable入参

@Validated
@RestController
public class ValidController {
    /**
     * 2.对@RequestParam|@PathVariable入参进行校验
     * 为了使得参数校验生效&
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值