Java后端数据校验——JSR303

1.在实体类Entity上对属性使用校验注解

Java后端数据校验——JSR303_第1张图片Java后端数据校验——JSR303_第2张图片

@Data
@TableName("pms_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

    /**
	 * 分组校验,group指定校验的组,与controller方法指定的分组对应
	 */
	@NotNull(message = "修改时id不能为空",groups = {UpdateGroup.class})
	@Null(message = "新增时不能指定id",groups = {AddGroup.class})
	@TableId
	private Long catId;

	/**
	 *  名称
	 */
	@NotNull(message = "名称不能为空",groups = {AddGroup.class,UpdateGroup.class})  //不为空校验,可以自定义校验提示信息message
	private String name;

    //  邮箱
    @Email(message = "邮箱不正确",groups = {AddGroup.class,UpdateGroup.class})  //校验邮箱格式 
    private String email;
}

2.在controller中对传入的实体类加注解@Validdated,并指定分组(分组校验),否则不会进行校验

@RestController
@RequestMapping("product/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;


     /**
     * 保存
     * /@Validdated:启用校验,并指定属于添加组(与参数校验分组对应)
     * 如果此处不处理校验异常,可去掉BindResult,将自动抛出异常,然后由统一异常处理类来处理
     */
    @RequestMapping("/save")
    public R save(@Validated({AddGroup.class}) @RequestBody CategoryEntity category, BindingResult result){
        //如果有校验错误
        if (result.hasErrors()){
            Map map = new HashMap<>();
            //获取校验信息
            result.getFieldErrors().forEach((item)->{
                //提示信息
                String message = item.getDefaultMessage();
                //校验失败的字段名
                String field = item.getField();
                map.put(field,message);
            });
            return R.error(400,"提交的数据不合法").put("data",map);
        }else{
            categoryService.save(category);
            return R.ok();
        }
    }
}

 

你可能感兴趣的:(Java)