✅P66_JSR303数据校验

gong_yz大约 2 分钟谷粒商城

JSR303是后端校验数据的一种规范。

使用JSR303数据校验的步骤

一、导入SpringBoot整合JSR303的依赖

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

常用JSR303注解的作用:

Bean Validation 中内置的constraint

image-20240213121944578
image-20240213121944578
img
img

Hibenate Validator中额外附加的 constriant

img
img

二、为实体类字段标记注解

例如:品牌名不能是个空字符串,我们可以标记@NotEmpty并且可以自定义校验信息

@NotEmpty
private String brandName;

message默认使用的是ValidationMessages_zh_CN.properties中的配置信息,我们可以自定义校验信息

@NotEmpty(message="品牌名不能为空")
private String brandName;

三、告诉SpringMVC我们要校验的实体类,通过使用@Valid,如果不使用此注解则我们标记的校验注解不会生效

@RequestMapping("/save")
public R save1(@Valid @RequestBody BrandEntity brand) {
    brandService.save(brand);
    return R.ok();
}
image-20240213122651500
image-20240213122651500

status:400表示:这个是校验失败的报错信息。但是,响应体的信息显然并不符合我们的要求,没有错误提示

四、使用BindingResult获取校验的信息

	/**
     * 保存
     */
    @RequestMapping("/save")
    public R save(@Valid  @RequestBody BrandEntity brand, BindingResult bindingResult){
        if (bindingResult.hasErrors()){
            Map<String,String> map=new HashMap<>();
            // 获取所有的校验错误结果并且进行遍历
            bindingResult.getFieldErrors().forEach((item)->{
                // 1.获取校验错误的字段名
                String name=item.getField();
                //2.获取校验错误信息
                String message=item.getDefaultMessage();
                map.put(name,message);
            });
            return R.error(400,"提交数据不合法").put("data",map);
        }else{
            brandService.save(brand);
            return R.ok();
        }
    }

测试结果如下:

image-20240213122958039
image-20240213122958039

为BrandEntity的属性设置校验注解

/**
 * 品牌logo地址
 */
@NotBlank(message = "品牌logo地址不能为空")
@URL(message = "logo必须是一个合法的url地址")
private String logo;
/**
 * 检索首字母
 */
@NotEmpty(message = "检索首字母不能为空")
@Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是一个字母")
private String firstLetter;
/**
 * 排序
 */
@NotNull(message = "排序不能为空")
@Min(value = 0, message = "排序必须大于等于0")
private Integer sort;