关于参数校验

JSR303校验:

1.使用校验注解:
在Java中提供了一系列的校验方式,它这些校验方式在“javax.validation.constraints”包中,提供了如@Email,@NotNull等注解。

在非空处理方式上提供了@NotNull,@Blank和@NotEmpty
(1)@NotNull

The annotated element must not be null. Accepts any type.
注解元素禁止为null,能够接收任何类型

(2)@NotEmpty

the annotated element must not be null nor empty.

该注解修饰的字段不能为null或""

Supported types are:

支持以下几种类型

CharSequence (length of character sequence is evaluated)

字符序列(字符序列长度的计算)

Collection (collection size is evaluated)
集合长度的计算

Map (map size is evaluated)
map长度的计算

Array (array length is evaluated)
数组长度的计算

(3)@NotBlank

The annotated element must not be null and must contain at least one non-whitespace character. Accepts CharSequence.
该注解不能为null,并且至少包含一个非空白字符。接收字符序列。
JSR303常用注解:https://blog.csdn.net/w306026355/article/details/85094270
2:在请求方法中,使用校验注解@Valid,开启校验
3:在校验的Bean实体之后,紧跟一个BindResult,就可以获取到校验的结果。拿到校验的结果,就可以自定义的封装。

   @RequestMapping("/save")
    // @RequiresPermissions("product:brand:save")
    public R save(@Valid @RequestBody BrandEntity brand, BindingResult result) {
        //1.判断是否出错
        if (result.hasErrors()) {
            Map<String, String> map = new HashMap<>();
            result.getFieldErrors().forEach(fieldError -> {
                String message = fieldError.getDefaultMessage();
                String field = fieldError.getField();
                map.put(field, message);
            });
            return R.error(400, "参数不合法").put("data", map);
        } else {
            brandService.save(brand);
            return R.ok();
        }
    }

4.分组校验
一个实体极可能多个接口使用,在不同接口的业务规则中,同一个参数的校验也可能拥有不同的校验规则,此时就需要进行分组的校验.
4.1:建立分组标志
“javax.validation.constraints”包中的校验注解,都有一个属性为groups,groups的值为一个数组,我们可以在公共模块中建立空接口作为分组标志,如:AddGroup,EditGroup
使用方法示例:

     * 品牌名
     */
    @NotBlank(message = "品牌名不可为空", groups = AddGroup.class)
    private String name;
    /**
     * 品牌logo地址
     */
    @NotNull(groups = AddGroup.class)
    @URL(message = "logo必须是一个合法url地址", groups = {AddGroup.class, UpdateGroup.class})
    private String logo;
    /**
     * 介绍
     */
    @NotBlank(groups = {AddGroup.class})
    private String descript;

4.2:在校验的接口中使用更精确的@Validated(xxx.class)注解来开启参数校验,取代原来的@Valid注解,标明分组

 public R update(@Validated(UpdateGroup.class) @RequestBody BrandEntity brand) 
//表示该接口处于修改分组下的校验

5.自定义校验注解以及校验器
https://www.bilibili.com/video/BV1np4y1C7Yf?p=70

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容