Spring Boot 使用hibernate validator进行参数校验

demo

实体类

public class UserBean {
    @NotBlank(message="用户名不能为空")
    private String userName;

    @NotBlank(message="年龄不能为空")
    @Pattern(regexp="^[0-9]{1,2}$",message="年龄不正确")
    private String age;

    @AssertFalse(message = "必须为false")
    private Boolean isFalse;
    /**
     * 如果是空,则不校验,如果不为空,则校验
     */
    @Pattern(regexp="^[0-9]{4}-[0-9]{2}-[0-9]{2}$",message="出生日期格式不正确")
    private String birthday;
}

测试;

@RestController
@RequestMapping("/vh")
public class ValidatorController {
 
    @RequestMapping("/resign")
    public String resign(@RequestBody @Valid  UserBean user ) {
    	
    	
        return "success";
    }
}

如果校验通不过返回这样的报文:

这种方式返回的报文不能控制,我们来看第二种方案:

工具类;

public class ValidatorUtils {
    private static Validator validator;

    static {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }

    /**
     * 校验对象
     * @param object        待校验对象
     * @throws RuntimeException  校验不通过,则报RuntimeException异常
     */
    public static void validateEntity(Object object)
            throws RuntimeException {
        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object);
        if (!constraintViolations.isEmpty()) {
        	ConstraintViolation<Object> constraint = constraintViolations.iterator().next();
        	throw new RuntimeException(constraint.getMessage());
        }
    }
}

测试:

@RestController
@RequestMapping("/vh")
public class ValidatorController {
 
    @RequestMapping("/resign")
    public String resign(@RequestBody @Valid  UserBean user ) {
    	ValidatorUtils.validateEntity(user);
    	
        return "success";
    }
}

附录:

注解说明:

Bean验证约束
注解 支持的数据类型 作用
@AssertFalse Boolean, boolean 值等于false
@AssertTrue Boolean, boolean 值等于true
@Future java.util.Date 等 检查给定的日期比当前日期晚.
@Past java.util.Date 等 检查给定的日期比当前日期早.
@Max BigDecimal, BigInteger, byte, short, int, long 以及包装类 检查该值是否小于或等于约束条件中指定的最大值.
@Min BigDecimal, BigInteger, byte, short, int, long 以及包装类 检查该值是否大于或等于约束条件中指定的最小值.
@NotNull 任意类型 带注释的值不为null.
@Null 任意类型 带注释的值为null.
@Pattern(regex=, flag=) String 检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配.
@Size(min=, max=) String,Collection,Map,array 检查带注释的元素的大小是否在最小值和最大值之间.
@Valid 任何引用数据类型  
@CreditCardNumbe String 检查信用卡号
@Email String 检查指定的字符串是否为有效的电子邮件地址。
@Length(min=, max=) String 确认带注释的字符串在min和max之间.
@NotBlank String 值不为null 切不为"", 不为"  "
@NotEmpty String,Collection,Map,array 值不为null 或者没有值
@Range(min=, max=) BigDecimal,String, BigInteger, byte, short, int, long 以及包装类 值是否位于(包含)指定的最小值和最大值之间。
@SafeHtml(whitelistType=, additionalTags=)   检查带注释的值是否包含潜在的恶意片段,如脚本/。为了使用这个约束,jsoup库必须是类路径的一部分。可以选择whitelistType属性预定义白名单类型。您还可以使用additionalTags属性为白名单指定额外的html标记。
@URL(protocol=, host=, port=, regexp=, flags=) String 根据RFC2396,检查带注释的字符串是否是有效的URL。如果指定了任何可选参数协议、主机或端口,相应的URL片段必须匹配指定的值。可选参数regexp和旗帜允许指定URL必须匹配的额外正则表达式(包括正则表达式标志)。

猜你喜欢

转载自blog.csdn.net/ityqing/article/details/82744781