JSR303统一校验使用

JSR303也称为bean validation,定义了一套bean验证规范。通过注解的方式关联属性与规则

使用方式

1.引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.常用注解

  • @Null:验证对象是否为null。
  • @NotNull:验证对象是否不为null,但无法检查长度为0的字符串。
  • @NotBlank:检查约束字符串是否不为Null且被Trim后的长度大于0,只对字符串有效,且会去掉前后空格。
  • @NotEmpty:检查约束元素是否为NULL或者是EMPTY。
  • @AssertTrue@AssertFalse:分别验证Boolean对象是否为true或false。
  • @Size(min=, max=)@Length(min=, max=):验证对象(如Array, Collection, Map, String)的长度或字符串的长度是否在给定范围之内。
  • @Past@Future:验证Date和Calendar对象是否在当前时间之前或之后。
  • @Pattern:验证String对象是否符合正则表达式的规则。

3.在bean的成员变量上引用注解。

4.抛出的方法为MethodArgumentNotValidException,因此需要在统一抛出异常时将其加入@controlleradvice

复制代码
   @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){

        BindingResult bindingResult = e.getBindingResult();
        List<String>errList=new ArrayList<>();

        bindingResult.getFieldErrors().forEach(item->{
            errList.add(item.getDefaultMessage());
        });
        String errors = StringUtils.join(errList, ",");
        log.error("系统异常{}",errors);

        return new RestErrorResponse(errors);
    }
复制代码

 

5.在controller中对相应的参数引入注解@Validated

6.如果我的新增和更新的时候同时使用了一个bean,但是他们的验证要求不一样,我该怎么做:

JSR303提供了分组校验的方法,

  •  首先定义分组接口
public class ValidationGroups {
    public interface Insert{};
    public interface Delete{};
    public interface Update{};
}
  •  成员变量上的注解需要额外添加group变量来标注当前注解具体属于哪一分组
    @NotEmpty(message = "新增课程名称不能为空",groups = {ValidationGroups.Insert.class})
    @NotEmpty(message = "修改课程名称不能为空",groups = {ValidationGroups.Update.class})
    @ApiModelProperty(value = "课程名称", required = true)
    private String name;
  •  在@Validated中表明当前使用的是哪一种接口方案
@RequestBody @Validated(ValidationGroups.Insert.class) AddCourseDto addCourseDto

 

posted @   天启A  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示