真实业务
1.实体类
package com.rjgf.manage.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.rjgf.common.annotation.Excel;
import com.rjgf.common.core.domain.BaseEntity;
import com.rjgf.manage.other.ValidParameterGroup;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* 基础用户对象 common_user
*
* @author
* @date 2022-10-21
*/
public class CommonUser extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空", groups = {ValidParameterGroup.Update.class})
private Long userId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户账号
*/
@NotBlank(message = "用户账号不能为空", groups = {ValidParameterGroup.Insert.class, ValidParameterGroup.Update.class})
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@Excel(name = "用户账号")
private String userName;
/**
* 用户昵称
*/
@Excel(name = "用户昵称")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@NotBlank(message = "用户昵称不能为空", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
private String nickName;
/**
* 用户类型(00系统用户)
*/
private String userType;
/**
* 用户邮箱
*/
@Size(min = 0, max = 50, message = "用户邮箱长度不能超过50个字符", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@NotBlank(message = "用户邮箱不能为空", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@Excel(name = "用户邮箱")
private String email;
/**
* 手机号码
*/
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@NotBlank(message = "手机号码不能为空", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@Excel(name = "手机号码")
private String phonenumber;
/**
* 用户性别(0男 1女 2未知)
*/
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
private String sex;
/**
* 头像地址
*/
private String avatar;
/**
* 密码
* 不传递密码给前端,但是后端数据库查出来使用,允许前端传密码过来
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@Size(min = 0, max = 30, message = "密码长度不能超过30个字符", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
@NotBlank(message = "密码不能为空", groups = {ValidParameterGroup.Insert.class,ValidParameterGroup.Update.class})
private String password;
/**
* 帐号状态(0正常 1停用)
*/
private String status;
/**
* 删除标志(0代表存在 2代表删除)
*/
private String delFlag;
/**
* 最后登录IP
*/
private String loginIp;
/**
* 最后登录时间
*/
private Date loginDate;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public Date getLoginDate() {
return loginDate;
}
public void setLoginDate(Date loginDate) {
this.loginDate = loginDate;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("deptId", getDeptId())
.append("userName", getUserName())
.append("nickName", getNickName())
.append("userType", getUserType())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("loginIp", getLoginIp())
.append("loginDate", getLoginDate())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
2.参数分组
建议一定要分,不能因为业务简单,业务变化是无法想象的,不能早期为了省事,以后难以维护。
package com.rjgf.manage.other;
import javax.validation.groups.Default;
/**
* @author
* 进行参数校验分组
*/
public interface ValidParameterGroup extends Default {
interface Insert {
}
interface Update {
}
interface Query {
}
interface Delete {
}
}
3.控制器校验参数
/**
* 新增基础用户
*/
@PreAuthorize("@ss.hasPermi('manage:user:add')")
@Log(title = "基础用户", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated(value = ValidParameterGroup.Insert.class) @RequestBody CommonUser commonUser) {
return toAjax(commonUserService.insertCommonUser(commonUser));
}
/**
* 修改基础用户
*/
@PreAuthorize("@ss.hasPermi('manage:user:edit')")
@Log(title = "基础用户", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated(value = ValidParameterGroup.Update.class) @RequestBody CommonUser commonUser) {
return toAjax(commonUserService.updateCommonUser(commonUser));
}
4.业务层抛出若依自带异常
/**
* 参数校验
*/
public void checkUpdateUserParameter(CommonUser oldUser, CommonUser newUser) {
String username = newUser.getUserName(),
phoneNumber = newUser.getPhonenumber(),
email = newUser.getEmail();
//做了修改
if (!StringUtils.equals(oldUser.getUserName(), newUser.getUserName())) {
if (commonUserMapper.checkUserNameUnique(username) > 0) {
throw new BaseException("保存用户" + username + "失败,注册账号已存在");
}
} else if (!StringUtils.equals(oldUser.getPhonenumber(), newUser.getPhonenumber())) {
if (commonUserMapper.checkUserPhoneNumberUnique(phoneNumber) > 0) {
throw new BaseException("保存用户" + username + "失败,电话号码已存在");
}
} else if (!StringUtils.equals(oldUser.getEmail(), newUser.getEmail())) {
if (commonUserMapper.checkUserEmailUnique(email) > 0) {
throw new BaseException("保存用户" + username + "失败,邮箱已存在");
}
}
}
5.在控制器层捕捉异常
5.1 自己抛出的异常
package com.rjgf.manage.exception;
import com.rjgf.common.core.domain.AjaxResult;
import com.rjgf.common.exception.base.BaseException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @author
* BaseException 是框架基础异常类,继承RuntimeException
* 统一处理自定义异常,将提示消息返回
*/
@RestControllerAdvice(basePackages = "com.rjgf.manage.controller")
public class BaseExceptionHandle {
@ExceptionHandler(BaseException.class)
public AjaxResult handleBaseException(BaseException e) {
return AjaxResult.error(e.getDefaultMessage());
}
}
5.2 参数校验异常
package com.rjgf.manage.exception;
import com.rjgf.common.core.domain.AjaxResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.Objects;
/**
* @author
* <p>
* 统一处理参数校验异常,将提示消息返回
*/
@RestControllerAdvice(basePackages = "com.rjgf.manage.controller")
public class ValidParameterException {
@ExceptionHandler(MethodArgumentNotValidException.class)
public AjaxResult handleBaseException(MethodArgumentNotValidException e) {
return AjaxResult.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
}
}