首页 > 其他分享 >微服务实战——品牌管理(JSR303,SKU&SPU)

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

时间:2024-09-07 14:53:39浏览次数:6  
标签:SKU groups JSR303 SPU private 校验 AddGroup message class

品牌管理

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;

}

标签:SKU,groups,JSR303,SPU,private,校验,AddGroup,message,class
From: https://blog.csdn.net/qq_63275583/article/details/141996135

相关文章

  • 如何使用京东JD商品SKU信息API进行商品信息查询和提取
    1.API调用方法概述京东JD商品SKU信息API通常用于查询特定SKU(StockKeepingUnit)的商品详细信息。在调用API之前,你需要确保已经注册成为京东开发者,并获得了相应的API权限和访问密钥。API调用方法:HTTP方法:通常是GET或POST,具体取决于API的要求。URL:API的端点URL,从京东开放平台......
  • 商城项目SKU展示页选中属性完成跳转逻辑-----商城项目
    <!DOCTYPEhtml><htmlxmlns:th="http://www.thymeleaf.org"> <head> <metacharset="UTF-8"> <title></title> <linkrel="stylesheet"type="text/css"href="/static/item/......
  • Sputnik 打靶渗透
    一、信息收集1、查看靶机的MAC地址:2、查看靶机的ip地址:nmap192.168.13.0/243、查看靶机开放的端口:nmap-p--sC-sT-sV-A192.168.13.1594、分别访问靶机的8089、55555和61337端口,发现在61337端口有一个登录框:点击services和servicesNS是一个登录框5、......
  • js reduce 根据sku属性生成sku
    如何使用JavaScript中的reduce函数来生成SKU属性的SKU。SKU(StockKeepingUnit)通常用于唯一标识商品或库存。假设你有一个包含商品属性的数组,例如:constproperties=[{name:'颜色',value:'红色'},{name:'尺寸',value:'XL'},{name:'材质',valu......
  • 用API实现商品sku抓取字段展示-淘宝sku区间价展示逻辑和规则分析
    有卖家问我:我的链接里面有5个sku,都是不同的价格,为什么消费者看到的不是最低价呢?这是因为淘宝平台商品价格的展示规则发生了变化,存在SKU区间价的产品,现在在搜索结果页面的曝光已经不是默认显示最低sku价了。现在平台展示逻辑主要有3点:①平台会结合着消费者的千人千面进行不......
  • PHP请求示例商品详情数据(属性规格sku详情图等)示例,json格式
    在PHP中请求商品详情数据(包括属性、规格、SKU详情、图片等)通常涉及向一个API发送HTTP请求,然后解析返回的JSON格式数据。以下是一个示例流程,包括如何发送请求和如何处理返回的JSON数据。1.发送HTTPGET请求首先,你需要知道API的URL,以及是否需要任何认证(如API密钥、OAuth令牌等......
  • vk-data-goods-sku-popup uniapp vue3示例
    效果图组件简介vk-data-goods-sku-popup是一个uniapp上面方便好用的sku组件,使用场景包括但不限于商品详情页、购物车页面、订单结算页、搜索结果页下面就上代码了,完整vue页面的代码如下<scriptsetup>import{ref,defineEmits,defineProps,computed}from'vue'//显示......
  • 淘宝APP商品详情API接口(标题|主图|SKU|价格|优惠价|视频|销量|到手价|库存)
    在网页抓取方面,可以使用Python、Java等编程语言编写程序,通过模拟HTTP请求,获取淘宝网站上的商品详情页面数据。在数据提取方面,可以使用正则表达式、XPath等方式从HTML代码中提取出有用的信息。值得注意的是,淘宝天猫网站的页面结构会不断更新,因此需要定期更新程序,以保证数......
  • 隐语实训09-SML入门基于SPU迁移机器学习算法实践
    一、32位浮点数32位浮点数(SinglePrecisionFloatingPoint)是一种用于表示实数的标准格式,由IEEE754标准定义。表示方法32位浮点数由三部分组成:符号位(S):1位,表示数值的正负。指数位(E):8位,用于表示数值的范围。尾数位(M):23位,表示有效数字。其表示公式为:......
  • API接口开发系列:店铺所有商品、商品详情、SKU价格详情图
    一、店铺所有商品API接口概述:店铺所有商品API接口是一种用于获取指定店铺下所有商品信息的接口。API接口接入(taobao2024api)通过这个接口,开发者可以获取商品的详细信息,包括商品的基本信息、价格、库存等关键属性,以满足前端展示和用户需求。接口设计:请求方式:通常采用GET请求......