微服务实战——品牌管理(JSR303,SKU&SPU)

品牌管理

1.JSR303

1、给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示

2、开启校验功能@Valid
    效果:校验错误以后会有默认的响应;
3、给校验的参数bean后紧跟一个BindingResult,就可以获取到校验的结果
4、分组校验(多场景的复杂校验)
       1)、@NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
        给校验注解标注什么情况需要进行校验
       2)、@Validated({AddGroup.class})
       3)、默认没有指定分组的校验注解@NotBlank,在分组校验情况@Validated({AddGroup.class})下不生效,只会在@Validated生效;
5、自定义校验
    1)、编写一个自定义的校验注解
    2)、编写一个自定义的校验器 ConstraintValidator
    3)、关联自定义的校验器和自定义的校验注解

/**

@Documented【可以指定多个不同的校验器,适配不同类型的校验】

原始版本

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

	/**
	 * 品牌id
	 */
	@TableId
	private Long brandId;

	/**
	 * 品牌名
	 */
	@NotBlank(message = "品牌名必须提交")
	private String name;
	/**
	 * 品牌logo地址
	 */
	@NotEmpty
	@URL(message = "logo地址只能为合法的URL")
	private String logo;
	/**
	 * 介绍
	 */
	private String descript;
	/**
	 * 显示状态[0-不显示;1-显示]
	 */
	@NotNull
	@Min(value = 0, message = "展示字段只能是0或1")
	@Max(value = 1, message = "展示字段只能是0或1")
	private Integer showStatus;
	/**
	 * 检索首字母
	 */
	@NotEmpty
	@Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是一个字母")
	private String firstLetter;
	/**
	 * 排序
	 */
	@NotNull
	@Min(value = 0, message = "排序必须非负整数")
	private Integer sort;

}
/**
 * 保存
 */
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult result){
    if (result.hasErrors()) {
        Map<String, String> map = new HashMap<>();
        // 1.获取校验的错误结果
        result.getFieldErrors().forEach((item) -> {
            // 1.1.获取到错误信息
            String message = item.getDefaultMessage();
            // 1.2.获取错误属性名字
            String field = item.getField();
            map.put(field, message);
        });
        return R.error(400, "提交的数据不合法").put("data", map);
    }else{
        brandService.save(brand);
        return R.ok();
    }
}

集中处理所有异常

//@ResponseBody
//@ControllerAdvice(value = "com.cwh.gulimall.product.controller")
@RestControllerAdvice(value = "com.cwh.gulimall.product.controller")
@Slf4j
public class GulimallExceptionControllerAdvice {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public R handleValidException(MethodArgumentNotValidException e){
        log.error("数据校验出现问题{},异常类型{}", e.getMessage(), e.getClass());
        BindingResult bindingResult = e.getBindingResult();

        Map<String, String> map = new HashMap<>();
        bindingResult.getFieldErrors().forEach((fieldError) -> {
            map.put(fieldError.getField(), fieldError.getDefaultMessage());
        });

        return R.error(400, "数据校验出现问题").put("data", map);
    }

    @ExceptionHandler(Exception.class)
    public R handleException(Exception e){
        log.error("数据校验出现问题{},异常类型{}", e.getMessage(), e.getClass());
        return R.error(400, "出现异常");
    }
}
/**
     * 保存
     */
    @RequestMapping("/save")
    public R save(@Valid @RequestBody BrandEntity brand){
//        if (result.hasErrors()) {
//            Map<String, String> map = new HashMap<>();
//            // 1.获取校验的错误结果
//            result.getFieldErrors().forEach((item) -> {
//                // 1.1.获取到错误信息
//                String message = item.getDefaultMessage();
//                // 1.2.获取错误属性名字
//                String field = item.getField();
//                map.put(field, message);
//            });
//            return R.error(400, "提交的数据不合法").put("data", map);
//        }else{
//            brandService.save(brand);
//            return R.ok();
//        }

        brandService.save(brand);
        return R.ok();
    }

分组

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

	/**
	 * 品牌id
	 */
	@NotNull(message = "修改时必须指定品牌id", groups = UpdateGroup.class)
	@Null(message = "新增时不能指定品牌id", groups = AddGroup.class)
	@TableId
	private Long brandId;

	/**
	 * 品牌名
	 */
	@NotBlank(message = "品牌名必须提交", groups = AddGroup.class)
	private String name;
	/**
	 * 品牌logo地址
	 */
	@NotEmpty(message = "新增时必须指定品牌logo", groups = AddGroup.class)
	@URL(message = "logo地址只能为合法的URL", groups = {AddGroup.class, UpdateGroup.class})
	private String logo;
	/**
	 * 介绍
	 */
	private String descript;
	/**
	 * 显示状态[0-不显示;1-显示]
	 */
	@NotNull(message = "新增时必须指定显示状态", groups = AddGroup.class)
	@Min(value = 0, message = "展示字段只能是0或1", groups = {AddGroup.class, UpdateGroup.class})
	@Max(value = 1, message = "展示字段只能是0或1", groups = {AddGroup.class, UpdateGroup.class})
	private Integer showStatus;
	/**
	 * 检索首字母
	 */
	@NotEmpty(message = "新增时必须指定检索首字母", groups = AddGroup.class)
	@Pattern(regexp = "/^[a-zA-Z]$/", message = "检索首字母必须是一个字母", groups = {AddGroup.class, UpdateGroup.class})
	private String firstLetter;
	/**
	 * 排序
	 */
	@NotNull(message = "新增时必须指定排序", groups = AddGroup.class)
	@Min(value = 0, message = "排序必须非负整数", groups = {AddGroup.class, UpdateGroup.class})
	private Integer sort;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值