validate与国际化配合效果更加~

前言:当我们用@valid或者@validate验证controller层接收前端发来的对象数据时,在对象的实体类上的validation相关的验证注解有起效了,很多时候我们会写message=“xxx”自定义验证不通过的内容。例如:@NotNull(message = "id不能为空")很不优雅。点开源码可以看见默认的message,String message() default "{javax.validation.constraints.NotNull.message}";,这就相当优雅了,设想我们有很多的业务有很多的业务提示,直接写死的话不够优雅,后期也不方便待修改,于是就有了这篇博客,使用国际化优雅的返回提示信息。本文从对validator国际化的用法开始介绍。

validator数据验证

数据验证给了我们很多方便,避免了不少在接收完参数之后逐一验证参数的合法性所写的大量验证代码。

相关注解

  • @NotNull不为空
  • @NotBlank不为空白
  • NotEmpty至少有一个
  • @Range指定范围
  • @Length指定长度范围
  • @Min不能小于最小值
  • @Max不能大于最大值
  • @Email邮箱验证
  • @URL指定URL

还有很多注解可查看javax.validationorg.hibernate.validator包。

@Validated 和 @Valid

@Valid@Validated都可以用于验证,@Valid是JSR-303规范的注解,可以用在参数、属性、嵌套属性上,@Validated不能用在属性上。
@Validated支持分组。注解源码如下:

@Target({
   ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Valid {
   
}
@Target({
   ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Validated {
   
    Class<?>[] value() default {
   };
}

自定义注解验证

可以自定义验证的注解,需要实现ConstraintValidator注解。以下写一个样例,功能是验证地址只能是自己的安全列表中的地址。

@MustIn:

@Target({
   ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MustInConstraintValidator.class)
public @interface MustIn {
   

    String message() default "不可输入非法地址";

    Class<?>[] groups() default {
   };
    Class<? extends Payload>[] payload() default {
   };
}

MustInConstraintValidator:

public class MustInConstraintValidator implements ConstraintValidator<MustIn,String> {
   

    private final String[] local = {
   "安徽","淮南","寿县","北京","合肥","上海"};

    private final Log logger = LogFactory.getLog(MustInConstraintValidator.class);
    
    @Override
    public void initialize(MustIn mustIn) {
   
        logger.info("初始化自定义validate注解MustIn");
    }

    @Override
    public boolean isValid(String value
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值