说明:
(1)本篇博客内容说明:【更新目录分类】接口的开发;
(2)本篇博客需要注意的点:
? ? ? ? ? ●?本篇博客,总体上没有什么新的内容;
? ? ? ? ? ● UpdateCategoryReq这个类,我们图省事,是复制的AddCategoryReq;然后,我们增加了id属性;;一定要记得添加id属性的get和set方法;否则,接口就会返回【id不能为null】的错误信息;
目录
一:【更新目录分类】接口文档;以及该接口的几点说明;
二:正式开发;
1.在CategoryController类中,创建更新目录分类的方法:update()方法;
(1)?update方法的url,参数,参数校验,要比照接口来书写;
(2)同理,创建UpdateCategoryReq这个bean,以在更新接口处接收参数;
(3)方法说明;
2.在CategoryServiceImpl类中,创建更新目录分类的方法:update()方法;并在CategoryService接口中反向生成该方法的声明;
(1)方法说明:为了【防止分类重名】而添加的逻辑;
(2)因为传递参数,可能不全,所以调用updateByPrimaryKeySelective()方法,是非常合适的;
(3)在方法上添加@Override注解,并通过快捷键,在CategoryService接口中,反向生成updat()方法的声明;
3.启动项目,测试;
(1)正常的情况;
(2)失败的情况:没有通过重名的检查;
一:【更新目录分类】接口文档;以及该接口的几点说明;
说明:
(1)【更新目录分类】接口,请求方式是POST;然后,其参数是放在body中的,JSON格式;
(2)然后,更新的时候,是必须要传入id;其他四个参(name,type,parentId,orderNum),我们要更新哪个就传哪个值,如果不更新就可以为空;
(3)因为【我们不允许分类的名字,重名】,所以,我们在更新的时候,也要防止重名的情况;如下图所示:
(4)然后,更新操作,也要求有用户登录,且是管理员用户登录的情况下,才能操作;
二:正式开发;
1.在CategoryController类中,创建更新目录分类的方法:update()方法;
@ApiOperation("后台更新商品分类目录")
@PostMapping("/admin/category/update")
@ResponseBody
public ApiRestResponse updateCategory(HttpSession session, @Valid @RequestBody UpdateCategoryReq updateCategoryReq) {
//尝试获取当前登录用户
User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);
//如果获取不到,说明当前没有用户登录;就返回【用户未登录】的信息
if (currentUser == null) {
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_LOGIN);
}
//校验当前用户是否是管理员用户
boolean isAdminRole = userService.checkAdminRole(currentUser);
if (isAdminRole) {//如果是管理用户;就去执行【更新目录分类】;
Category category = new Category();
BeanUtils.copyProperties(updateCategoryReq, category);
categoryService.update(category);
return ApiRestResponse.success();
} else {//如果不是管理员用户;就返回【无管理员权限】的信息
return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_ADMIN);
}
}
说明:
(1)?update方法的url,参数,参数校验,要比照接口来书写;
(2)同理,创建UpdateCategoryReq这个bean,以在更新接口处接收参数;
UpdateCategoryReq:
package com.imooc.mall.model.request;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* 描述:【更新目录分类】接口的参数类;
*/
public class UpdateCategoryReq {
@NotNull(message = "目录id不能为null")
private Integer id;
@Size(min = 2, max = 5)
private String name;//目录名
@Max(3)
private Integer type;//目录级别
private Integer parentId;//上一级目录的id
private Integer orderNum;//同级目录的排序顺序
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Integer getOrderNum() {
return orderNum;
}
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
UpdateCategoryReq类需要按照更新接口的参数要求来编写;?对于更新接口来说,要求id不能为null;其他四个参(name,type,parentId,orderNum)是可以为空的;
一个特别容易出错的点:UpdateCategoryReq这个类,我们图省事,是复制的AddCategoryReq;然后,我们增加了id属性;;一定要记得添加id属性的get和set方法;否则,接口就会返回【id不能为null】的错误信息;
(3)方法说明;
Service层的update方法,在下一部分介绍;
2.在CategoryServiceImpl类中,创建更新目录分类的方法:update()方法;并在CategoryService接口中反向生成该方法的声明;
/**
* 更新目录分类
* @param updateCategory
*/
@Override
public void update(Category updateCategory) {
//因为分类的名字不允许重复;所以,在更新前需要有下面的判断逻辑;
if (updateCategory.getName() != null) {
Category categoryOld = categoryMapper.selectByName(updateCategory.getName());
if (categoryOld.getName() != null && !categoryOld.getId().equals(updateCategory.getId())) {
throw new ImoocMallException(ImoocMallExceptionEnum.NAME_EXISTED);
}
}
//如果没有name重名的风险,就调用方法去更新;
int count = categoryMapper.updateByPrimaryKeySelective(updateCategory);
if (count == 0) {
throw new ImoocMallException(ImoocMallExceptionEnum.UPDATE_FAILED);
}
}
说明:
(1)方法说明:为了【防止分类重名】而添加的逻辑;
(2)因为传递参数,可能不全,所以调用updateByPrimaryKeySelective()方法,是非常合适的;
(3)在方法上添加@Override注解,并通过快捷键,在CategoryService接口中,反向生成updat()方法的声明;
3.启动项目,测试;
启动项目;
(1)正常的情况;
(2)失败的情况:没有通过重名的检查;
|