响应体
-
响应体应该包含状态码,描述信息(如果需要的话),响应数据(如果需要的话)
package com.cy.store.util; import java.io.Serializable; /** * @author ZhangHailong * @date 2022/5/10 - 9:12 * @project_name 统一使用json格式的数据进行响应 */ public class JsonResult<E> implements Serializable{ // 响应体包含状态码,描述信息,响应数据 private Integer state; private String message; private E data; // 响应的数据可以是任何类型,所以用泛型 public JsonResult() { } public JsonResult(Integer state) { this.state = state; } public JsonResult(String message) { this.message = message; } public JsonResult(Integer state, E data) { this.state = state; this.data = data; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public E getData() { return data; } public void setData(E data) { this.data = data; } }
统一异常处理
-
因为在业务层会抛出异常,在控制层会根据不同的异常情况向前端返回响应结果,但是随着业务层功能的增加,所有的异常处理和调用业务方法等处理堆积在一块会显得代码很繁琐,所以,创建一个控制层基类,用于同一处理业务层抛出来的异常
package com.cy.store.controller; import com.cy.store.service.ex.InsertException; import com.cy.store.service.ex.ServiceException; import com.cy.store.service.ex.UsernameDuplicatedException; import com.cy.store.util.JsonResult; import org.springframework.web.bind.annotation.ExceptionHandler; /** * @author ZhangHailong * @date 2022/5/10 - 9:31 * @project_name 控制层基类,主要用于处理异常 */ public class BaseController { public static final int OK = 200; /* * @ExceptionHandler(ServiceException.class)表示统一处理ServiceException类型的异常 * 返回值是需要传递给前端的数据 * 自动将异常对象传递给此方法的参数列表 * */ @ExceptionHandler(ServiceException.class) public JsonResult<Void> handleServiceException(Throwable e) { // 注册模块无需传递给前端数据 JsonResult<Void> result = new JsonResult<>(); if (e instanceof UsernameDuplicatedException) { result.setState(4000); // result.setMessage(e.getMessage()); } else if (e instanceof InsertException) { result.setState(5000); // result.setMessage(e.getMessage()); } result.setMessage(e.getMessage()); // 不同的异常,e.getMessage()是不同的 return result; } }
控制层代码
-
控制层将异常处理交给控制基类,那么只需要关注在没有异常的情况下的处理逻辑
package com.cy.store.controller; import com.cy.store.entity.User; import com.cy.store.service.IUserService; import com.cy.store.util.JsonResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author ZhangHailong * @date 2022/5/10 - 9:29 * @project_name 用户模块控制层 */ @RequestMapping("users") @RestController public class UserController extends BaseController{ @Autowired private IUserService iUserService; @RequestMapping("register") public JsonResult<Void> registerUserController(User user) { iUserService.registerUser(user); // 如果上一步有异常,直接跳转到BaseController处理,其处理完毕直接向前端返回请求结果,以下代码就不再执行 // 如果上一步没有异常,说明注册成功,返回JsonResult结果 return new JsonResult<>(OK); } }