Controller层已经验证过ProductCategoryList是否为null或者空列表,为什么Service层还要再验证
来源:7-3 商品类别批量添加后端开发
慕田峪944480
2020-03-29
ProductCategoryManagementController 中
@RequestMapping(value = "/addproductcategories", method = RequestMethod.POST)
@ResponseBody
private Map<String, Object> addProductCategories(@RequestBody List<ProductCategory> productCategoryList, HttpServletRequest request) {
Map<String, Object> modelMap = new HashMap<>();
Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");
for (ProductCategory productCategory : productCategoryList) {
productCategory.setShopId(currentShop.getShopId());
}
if (productCategoryList != null && productCategoryList.size() > 0) {
...
} else {
modelMap.put("success", false);
modelMap.put("errMsg","请至少输入一个商品类别");
}
ProductCategoryServiceImpl
@Override
public ProductCategoryExecution batchAddProductCategory(List<ProductCategory> productCategoryList) throws ProductCategoryOperationException {
if (productCategoryList != null && productCategoryList.size() > 0) {
...
} else {
return new ProductCategoryExecution(ProductCategoryStateEnum.EMPTY_LIST);
}
如果在Controller层发现这个数组为空了,就不会触发Service层的return new ProductCategoryExecution(ProductCategoryStateEnum.EMPTY_LIST);
了吧……
所以不是很理解额。
写回答
2回答
-
同学好,这里再次重复验证主要考虑是层与层之间不进行相互信任的原则,主要是为程序的扩展做准备,比如日后我们单独将Service层剥离出来,作为rpc服务对外去提供服务,当然这个只是假设:)
142020-04-01 -
风之子陌
2020-03-30
同学,你可以这样想。批量添加商品类别那里有两个要填的数据,一个是priority,一个是productCategoryName。假如你只填了priority数据,那么返回的productCategoryList 既不为空,size()也大于0,那么将执行Service的操作
而数据库中设置的product_category_name字段是非空的,所以插入会报错,所以需要RuntimeExcption来触发回滚
122020-03-30
相似问题