JSR303---后端校验

前端校验方便用户的同时,也减轻了服务器压力
但当恶意访问者绕过浏览器,通过Postman等类似工具进行访问时,前端校验未必有用,此时我们需要添加后端校验

注解介绍

jsr303
Hibernate 中填充一部分在这里插入图片描述

使用

引入gav坐标

<!-- 属性效验-->
 <dependency>
     <groupId>javax.validation</groupId>
     <artifactId>validation-api</artifactId>
     <version>2.0.1.Final</version>
 </dependency>

目标Bean标注注解

@ToString
@Getter
@Setter
public class UmsAdminParam {
    //规定长度
    @Length(min = 6, max = 19, message = "用户名长度是6-18位")
    @ApiModelProperty(value = "用户名", required = true)
    private String username;
    @ApiModelProperty(value = "密码", required = true)
    private String password;
    //不能是空的
    @NotEmpty
    @ApiModelProperty(value = "用户头像")
    private String icon;
    @Email(message = "邮箱格式错误")
    @ApiModelProperty(value = "邮箱")
    private String email;
    @NotNull
    @ApiModelProperty(value = "用户昵称")
    private String nickName;
    @ApiModelProperty(value = "备注")
    private String note;
}	

通知Spring这个数据需要校验

@valid:校验错误会有默认的响应
在这里插入图片描述

自定义错误提示

还可以给需要校验的数据后添加一个BingingResult来封装自定义错误提示

public Stringregister(@Valid @RequestBody UmsAdminParam user,BindingResult result) {
  //得到所有错误信息计数
  int errorCount = result.getErrorCount();
  //错误数大于0
  if (errorCount>0){
      //得到所有错误
      List<FieldError> fieldErrors = result.getFieldErrors();
      //迭代错误
      fieldErrors.forEach((fieldError)->{
      	//错误信息
          String field = fieldError.getField();
          log.debug("属性:{},传来的值是:{},出错的提示消息:{}",
                  field,fieldError.getRejectedValue(),fieldError.getDefaultMessage());
      });
      return fieldError.getRejectedValue()+"出错:"+fieldError.getDefaultMessage();
  }else{
	return "登录成功";
  }
}

分组校验(多场景的复杂校验)

  1. @NotBlank(message=“不能为空”, groups={自己的空接口:Addgroup.clsss})给校验注解标注什么情况下需要校验
  2. @Validated({AddGroup.class})
  3. 默认没有指定分组的校验注解,在分组校验情况下(@Validated({Addgroup.class}))不生效

自定义校验

编写一个自定义的校验注解

  1. 创建Annotation类

    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.*;
    
    @Documented
    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ListValue {
      
      String message() default "{com.qhit.common.valid.ListValue.message}";
      Class<?>[] groups() default {};
      Class<? extends Payload>[] payload() default {};
    
      int[] vals() default {};
    }
    

    ValidationMssage.properties

    com.qhit.common.valid.ListValue.message=必须提交指定的值
    
  2. 编写一个自定义校验器

  3. 关联自定义的校验器和自定义的校验注解

    @Constraint(validatedBy = {ListValueValidatedBy.class/*可以指定多个校验器*/})
    public @interface ListValue
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值