spring参数注解校验

在写一些controller协议的时候,有些时候从前端传过来的参数较多,好的办法是定义一个实体类来封装请求参数,但是用实体类封装参数后,无法对参数值进行校验,可以使用spring的@Validated 结合java validation、hibernate validation注解进行校验。

个人建议使用spring的Validated注解,而不要使用hibernate的validat注解,hibernate注解适用于和数据库相关连的对象。

1.@validated 注解

@Validated is org.springframework.validation.annotation.Validated.

@RequestMapping(value = "/regist", method = {RequestMethod.GET, RequestMethod.POST})

@ResponseBody

public Object hualalaRegist(@Validated RegistVO registVO)

... }

 

@Validated 注解后,表示需要对其中的参数进行校验。

然后再对应的javabean里面的字段上使用注解校验字段,具体的注解见下面章节2

public class RegistVO {

    @NotBlank
    @Pattern(regexp = "^\\d{11}$", message = "手机号码格式错误")
    String phoneNumber; //手机号码

    @NotBlank
    String name; //姓名

    @NotBlank
    String loanBody;//借款主体

    @NotBlank
    String loanBodyId;//借款主体ID

    @NotNull
    BigDecimal borrowAmount;//借款金额

}

使用这个注解去校验参数之后如果参数不合法会抛出一个异常 ConstraintViolationException。结合上一篇博客讲的全局异常处理,这样你就可以捕获到这个异常,然后进行统一的处理,比如返回给前端错误信息等。

2.java validation 注解

注解也可以直接使用在方法的参数上,比如

public void getUser(@NotNull String name) {}

还可以使用在javabean里面的字段上,当javabean作为一个参数的时候使用@Validated注解才能实现校验,如上面章节1所讲

JSR提供的校验注解:         
@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(regex=,flag=)  被注释的元素必须符合指定的正则表达式    

3.hiberate validation 注解

 

@Email  被注释的元素必须是电子邮箱地址    
@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内    
@NotEmpty   被注释的字符串的必须非空    
@Range(min=,max=,message=)  被注释的元素必须在合适的范围内
@URL(protocol=,host=,    port=, regexp=, flags=)  合法的url

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

@NotNull           任何对象的value不能为null

@NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null

@NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

使用注解的好处是不在需要在Controller层去写复杂的参数校验逻辑,大大减少代码行数,注解校验参数与方式建议只在Controller层使用,Service层还是建议自己写代码去实现参数校验,具体原因就是注解并不是万能的,过多的使用注解会让代码可读性变差。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值