接口参数校验规范

参数验证框架

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.13.Final</version>
        </dependency>

常见的校验注解

@Valid 被注释的元素是一个对象,需要检查此对象的所有字段值
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=, max=) 被注释的元素必须在合适的范围内
@NotBlank 被注释的字符串的必须非空
@URL(protocol=,host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@ScriptAssert lang=, script=, alias=) 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@SafeHtml(whitelistType=,additionalTags=) classpath中要有jsoup包

主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:

@NotNull 任何对象的value不能为null @NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null @NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0

具体使用的例子

public class User {  

        @NotBlank  
        private String name;  

        //年龄要大于18岁  
        @Min(18)  
        private int age;  

        @Email  
        private String email;  

        //嵌套验证  
        @Valid  
        private Product products;  

        ... //省略getter,setter  
    }  

    public class Product {  

        @NotBlank  
        private String name;  

        //价格在10元-50元之间  
        @Range(min=10,max=50)  
        private int price;  

        ... //省略getter,setter  
    }

详情的注解 hibernate_validator_reference

springboot 参数类型

@QueryParam && @PathVariable

Step1 设置全局的拦截器,这个已经在common里面实现,更新common的maven版本
       <dependency>
            <groupId>com.eazytec.service</groupId>
            <artifactId>common</artifactId>
            <version>1.1.20</version>
        </dependency>

Step2 controller加上注解 @Validated     

@Validated
@SuppressWarnings("AlibabaMethodTooLong")
@RestController
@RequestMapping("/v3/gov/user")
public class ZqtGovUserController 


Step3 在需要校验的参数上加上注解并加上提示性文字

@PathVariable("govUserId")
@NotBlank(message = "参数不能为空")
@Pattern(regexp = Validator.REGEX_UUID, message = "参数必须是uuid格式") String govUserId

@RequestBody

Step1 在@RequestBody标识的javabean里面标识下需要演示的属性

public class GovRole implements Serializable {
    /**
     * 编号
     *
     * @mbg.generated
     */
    private String roleId;

    /**
     * 角色名称
     *
     * @mbg.generated
     */
    @NotBlank(message = "角色名称不能为空")
    private String name;

    /**
     * 父部门id,根部门为0
     *
     * @mbg.generated
     */
    @NotBlank(message = "parentid不能为空")
    private String parentid;

    /**
     * 企业id
     *
     * @mbg.generated
     */
    @NotNull(message = "organizationId不能为null")
    private Long organizationId;

}

Step2 在controller里面加入注解@Valid 和参数 BindingResult bindingResult来抛出异常

    if (bindingResult.hasErrors()) {
        return JSON.toJSONString(QixinchaResult.build(400, "参数异常",
                bindingResult.getFieldError().getDefaultMessage()));
    }

  /**
     * 创建角色
     *
     * @param role
     * @return role
     */
    @RequestMapping(value = "/create", method = RequestMethod.POST)
    @ResponseBody
    public String roleCreate(@Valid @RequestBody GovRole role, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return JSON.toJSONString(QixinchaResult.build(400, "参数异常",
                    bindingResult.getFieldError().getDefaultMessage()));
        }
        //生成bean
        GovRole create = govRoleWebService.createRole(role);
        //查重
        if (govRoleWebService.checkDuplicate(role)) {
            return JSON.toJSONString(QixinchaResult.build(600, "数据异常", "角色已存在"));
        }
        //入库
        int res = govRoleService.insert(create);
        return JSON.toJSONString(QixinchaResult.build(200, "success", res));

    }
江苏卓易信息科技股份有限公司-TNG基础平台组 all right reserved,powered by Gitbook该文件最后修改时间: 2021-01-27 06:23:28

results matching ""

    No results matching ""