wordpress主题站,商业网站开发实训总结,个人网站域名所有权,农村自建房设计图软件一、统一表现层返回值 根据我们不同的处理方法#xff0c;返回的数据格式都会不同#xff0c;例如添加只返回true|false#xff0c;删除同理#xff0c;而查询却返回数据。
Result类
为此我们封装一个result类来用于表现层的返回。
public class Result {//描述统一格式…一、统一表现层返回值 根据我们不同的处理方法返回的数据格式都会不同例如添加只返回true|false删除同理而查询却返回数据。
Result类
为此我们封装一个result类来用于表现层的返回。
public class Result {//描述统一格式中的数据private Object data;//描述统一格式中的编码用于区分操作可以简化配置0或1表示成功失败private Integer code;//描述统一格式中的消息可选属性private String msg;public Result() {}public Result(Integer code,Object data) {this.data data;this.code code;}public Result(Integer code, Object data, String msg) {this.data data;this.code code;this.msg msg;}public Object getData() {return data;}public void setData(Object data) {this.data data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg msg;}
}Code类
Code类不是固定的是商量好的一种编号每种编号对应业务操作的不同状态。
public class Code {//Code类的常量设计也不是固定的可以根据需要自行增减。public static final Integer SAVE_OK 20011;public static final Integer DELETE_OK 20021;public static final Integer UPDATE_OK 20031;public static final Integer GET_OK 20041;public static final Integer SAVE_ERR 20010;public static final Integer DELETE_ERR 20020;public static final Integer UPDATE_ERR 20030;public static final Integer GET_ERR 20040;
} BookController类
//统一每一个控制器方法返回值
RestController
RequestMapping(/books)
public class BookController {Autowiredprivate BookService bookService;PostMappingpublic Result save(RequestBody Book book) {boolean flag bookService.save(book);return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag);}PutMappingpublic Result update(RequestBody Book book) {boolean flag bookService.update(book);return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);}DeleteMapping(/{id})public Result delete(PathVariable Integer id) {boolean flag bookService.delete(id);return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);}GetMapping(/{id})public Result getById(PathVariable Integer id) {Book book bookService.getById(id);Integer code book ! null ? Code.GET_OK : Code.GET_ERR;String msg book ! null ? : 数据查询失败请重试;return new Result(code,book,msg);}GetMappingpublic Result getAll() {ListBook bookList bookService.getAll();Integer code bookList ! null ? Code.GET_OK : Code.GET_ERR;String msg bookList ! null ? : 数据查询失败请重试;return new Result(code,bookList,msg);}
}
对应效果 二、异常处理 对于Dao层(数据层)Service层(服务层)Controller(业务控制层)等所抛出的异常应该统一到业务控制层来处理。
1.封装异常处理器类
RestControllerAdvice注解可以声明一个类为异常处理器类
ExceptionHandler注解是定义当前方法用于处理哪一种异常通过形参可以把异常传进来 2. 项目中的异常 自定义异常都要继承RuntimeException这个类这个类的父类是Exception这个类是运行异常类碰到了自动往业务层传递异常。
BusinessException 自定义业务异常类
//自定义异常处理器用于封装异常信息对异常进行分类
public class BusinessException extends RuntimeException{private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}
//自动实现的构造方法有很多只不过这两种实用public BusinessException(Integer code, String message) {super(message);this.code code;}public BusinessException(Integer code, String message, Throwable cause) {super(message, cause);this.code code;}
} SystemException 自定义系统异常类
//自定义异常处理器用于封装异常信息对异常进行分类
public class SystemException extends RuntimeException{private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public SystemException(Integer code, String message) {super(message);this.code code;}public SystemException(Integer code, String message, Throwable cause) {super(message, cause);this.code code;}}
Code类的补充
public static final Integer SYSTEM_ERR 50001;public static final Integer SYSTEM_TIMEOUT_ERR 50002;public static final Integer SYSTEM_UNKNOW_ERR 59999;public static final Integer BUSINESS_ERR 60002; 异常控制类-ProjectExceptionAdvice
拦截并处理异常
//RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
RestControllerAdvice
public class ProjectExceptionAdvice {//ExceptionHandler用于设置当前处理器类对应的异常类型ExceptionHandler(SystemException.class)public Result doSystemException(SystemException ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(ex.getCode(),null,ex.getMessage()); //规范返回结果}ExceptionHandler(BusinessException.class)public Result doBusinessException(BusinessException ex){return new Result(ex.getCode(),null,ex.getMessage());}//除了自定义的异常处理器保留对Exception类型的异常处理用于处理非预期的异常ExceptionHandler(Exception.class)public Result doOtherException(Exception ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(Code.SYSTEM_UNKNOW_ERR,null,系统繁忙请稍后再试);}
}