/**买家商品
由 ProductInfo 和 ProductCategory 两者构成
*/
=============================================================================================
在写 controller 层之前,要先写几个 vo对象,这是用于展示层的。
第一个vo类:
/**
* http 请求返回 的 最外层对象
*
* @param <T>
*/
@Data
public class ResultVo<T> {
//错误码
private Integer code;
//提示信息
private String msg;
//具体内容
private T dataa;
}
=============================================================================================
第二个vo类:
/**
* 这个是 ResultVO 的 data 数据的最外层:
* 例如:
* 类目名称+
* 类目类别+
* 此类目所对应的商品详情(注意:此商品详情是前台所需要的详情)
*
*
*/
@Data
public class ProductVO {
/**
很多时候,前端需要的字段名称和后端的不符合,所以就用 @JsonProperty,返回给前端的是 json 格式的 字段名为 “name”,但是在后端其字段名 为 “categoryName”
@JsonProperty("name")
*/
@JsonProperty("name")
private String categoryName;
//这个 categoryType 不是展示给用户的,而是在后台controller 层 用于分辨商品的
@JsonProperty("type")
private Integer categoryType;
@JsonProperty("foods")
private List<ProductInfoVO> productInfoVOList;
}
=============================================================================================
第三个vo类:
/**
* 商品详情 是 用在 ProductVO 中
*
*/
@Data
public class ProductInfoVO {
@JsonProperty("id")
private String productId;
@JsonProperty("name")
private String productName;
@JsonProperty("price")
private BigDecimal productPrice;
@JsonProperty("description")
private String productDescription;
@JsonProperty("icon")
private String productIcon;
}
如同这样:如:女生最爱(类目名称),一个类目下对应多个商品。
controller层:
@RestController
@RequestMapping("/buyer/product")
public class BuyerProductController {
@Autowired
private ProductInfoService productInfoService;
@Autowired
private CategoryServiceImpl categoryService;
@GetMapping("/list")
public ResultVO list(){
//1.先查询所有上架商品
List<ProductInfo> productInfoList=productInfoService.findUpAll();
//2.然后将所有上架商品的类目类型 ,查询出来,放到一个 set集合中,这里使用 set而不是list是因为
//set不允许有重复的,list 允许重复
HashSet<Integer>categoryTypeSet=new HashSet<>();
for (ProductInfo productInfo :productInfoList){
categoryTypeSet.add(productInfo.getCategoryType());
}
List<ProductCategory>productCategoryList=categoryService.findByCategoryTypeIn(categoryTypeSet);
//3.将 所有的类目对象全部查询出来,依次循环,将相同类目的商品 放到一个 ProductVO对象中
List<ProductVO> productVOList=new ArrayList<>();
for (ProductCategory productCategory :productCategoryList){
ProductVO productVO=new ProductVO();
productVO.setCategoryName(productCategory.getCategoryName());
productCategory.setCategoryType(productCategory.getCategoryType());
List<ProductInfoVO> productInfoVOList=new ArrayList<>();
for (ProductInfo productInfo :productInfoList){
if (productInfo.getCategoryType().equals(productCategory.getCategoryType())){
ProductInfoVO productInfoVO=new ProductInfoVO();
BeanUtils.copyProperties(productInfo,productInfoVO);
productInfoVOList.add(productInfoVO);
}
}
productVO.setProductInfoVOList(productInfoVOList);
productVOList.add(productVO);
}
//这个类后边有
return ResultVOUtil.success(productVOList);
}
}
===================================================================================
//这是对 ResultVO 类的封装 public class ResultVOUtil { public static ResultVO success(Object object){ ResultVO resultVO=new ResultVO(); resultVO.setData(object); resultVO.setCode(0); resultVO.setMsg("成功"); return resultVO; } }
====================================================================================