文章目录
0. 前端代码示例
{
"code": 0,
"msg": "成功",
"data": [
{
"name": "热榜",
"type": 1,
"foods": [
{
"id": "123456",
"name": "皮蛋粥",
"price": 1.2,
"description": "好吃的皮蛋粥",
"icon": "http://xxx.com",
}
]
},
{
"name": "好吃的",
"type": 2,
"foods": [
{
"id": "123457",
"name": "慕斯蛋糕",
"price": 10.9,
"description": "美味爽口",
"icon": "http://xxx.com",
}
]
}
]
}
1. ResultVO
用于封装API最外层的三个属性的对象:
/**
* @author hh
*
* http请求返回的最外层对象
*/
@Data
public class ResultVO<T> {
//错误码
private Integer code;
//提示信息
private String message;
//具体内容
private T data;
}
2. ProductVO
用于封住商品类目的对象
/**
* 商品包含类目
*/
@Data
public class ProductVO{
//因为前端使用的是name,为了增加程序的可读性,使用categoryName
@JsonProperty("name")
private String categoryName;
//类目标号
@JsonProperty("type")
private Integer categoryType;
//商品
@JsonProperty("foods")
private List<ProductInfoVO> productInfoVOList;
}
3. ProductInfoVO
用于封装商品数据的对象:
/**
* 商品详情
*/
@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;
}
4. ResultVOUtil
用于封装返回结果和信息的工具类:
public class ResultVOUtil {
//成功
public static ResultVO success(Object object){
ResultVO resultVO = new ResultVO();
resultVO.setData(object);
resultVO.setCode(0);
resultVO.setMessage("成功");
return resultVO;
}
//成功
public static ResultVO success(){
return success(null);
}
//失败
public static ResultVO error(Integer code,String message){
ResultVO resultVO = new ResultVO();
resultVO.setCode(code);
resultVO.setMessage(message);
return resultVO;
}
}
5. Controller层
编写Controller层时从最外层向里面写:
/**
* @author hh
*
* 买家商品Controller层的实现,展示善品列表
*/
@RestController
@RequestMapping("/buyer/product")
public class BuyerProductController {
@Autowired
private ProductService productService;
@Autowired
private CategoryService categoryService;
@GetMapping("/list")
public ResultVO list(){
//1.数据库的查询:查询所有的上架商品
List<ProductInfo> productInfoList = productService.findUpAll();
//2.数据库的查询:查询类目(编号)
List<Integer> categoryTypeList = new ArrayList<>();
for(ProductInfo productInfo:productInfoList){
categoryTypeList.add(productInfo.getCategoryType());
}
List<ProductCategory> productCategoryList
= categoryService.findByCategoryTypeIn(categoryTypeList);
//3.数据拼装:将查询的数据拼装进各个对象中
List<ProductVO> productVOList = new ArrayList<>();
for(ProductCategory productCategory:productCategoryList){
ProductVO productVO = new ProductVO();
productVO.setCategoryName(productCategory.getCategoryName());
productVO.setCategoryType(productCategory.getCategoryType());
List<ProductInfoVO> productInfoVOList = new ArrayList<>();
for(ProductInfo productInfo:productInfoList){
if(productInfo.getCategoryType().equals(productCategory.getCategoryType())){
ProductInfoVO productInfoVO = new ProductInfoVO();
// productInfoVO.setProductId(productInfo.getProductId());
// productInfoVO.setProductName(productInfo.getProductName());
// productInfoVO.setProductPrice(productInfo.getProductPrice());
// productInfoVO.setProductDescription(productInfo.getProductDescription());
// productInfoVO.setProductIcon(productInfo.getProductIcon());
//上面的代码太啰嗦,可以使用工具类BeanUtils
//将productInfo对象的属性值拷贝到productInfoVO对象的属性中
BeanUtils.copyProperties(productInfo,productInfoVO);
productInfoVOList.add(productInfoVO);
}
}
productVO.setProductInfoVOList(productInfoVOList);
productVOList.add(productVO);
}
return ResultVOUtil.success(productVOList);
}
}