
(资料图)
状态码、状态码描述信息、数据。这部分功能封装到一个类中,将这类作为方法返回值,返回给前端浏览器。
package com.cy.store.util;import java.io.Serializable;/** * Json格式的数据进行响应 */public class JsonResult implements Serializable { //状态码 private Integer state; //描述信息 private String message; //数据类型不确定,声明称泛型 private E data; public JsonResult() { } public JsonResult(Integer state) { this.state = state; } public JsonResult(Throwable e) { this.message = e.getMessage(); } 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; }} 依据当前的业务功能模块进行请求的设计。
请求路径:/users/reg请求参数:User user请求类型:敏感类型用POST,没有用GET响应结果:JsonResult
package com.cy.store.controller;import com.cy.store.entity.User;import com.cy.store.service.IUserService;import com.cy.store.service.ex.InsertException;import com.cy.store.service.ex.UsernameDuplicatedException;import com.cy.store.util.JsonResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;// @Controller@RestController //controller+ResponseBody@RequestMapping("users")public class UserController { @Autowired private IUserService userService; @RequestMapping("reg") // @ResponseBody //表示此方法的响应结果以json格式进行数据的相应给到前端,为了防止在所有方法上添加,在类上使用注解 @RestController public JsonResult reg(User user){ // 创建响应结果对象 JsonResult result = new JsonResult<>(); try { userService.reg(user); result.setState(200); result.setMessage("注册成功"); } catch (UsernameDuplicatedException e) { result.setState(400); result.setMessage("用户名被占用"); }catch (InsertException e){ result.setState(500); result.setMessage("注册时产生未知的异常"); } return result; }} 在控制层抽离一个父类,在这个父类中统一的去处理关于异常的相关操作,编写一个BaseController类,统一处理异常。
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;/** * 控制层类的基类 */public class BaseController { /** * 操作成功的状态 */ public static final int OK = 200; //请求处理方法,这个方法的返回值就是需要传递给前端的数据 //自动将异常对象传递给此方法的参数列表上 //当前项目中产生了异常,会被统一拦截到此方法中,这个方法此时就充当的是请求处理方法,方法的返回值直接给到前端。 @ExceptionHandler(ServiceException.class) //用于统一处理抛出的异常 public JsonResult handleException(Throwable e){ JsonResult result = new JsonResult<>(e); if (e instanceof UsernameDuplicatedException){ result.setState(4000); result.setMessage("用户名已经被占用"); } else if (e instanceof InsertException) { result.setState(5000); result.setMessage("注册时产生未知的异常"); } return result; }} 重新构建了reg()方法
// @Controller@RestController //controller+ResponseBody@RequestMapping("users")public class UserController extends BaseController { @Autowired private IUserService userService; @RequestMapping("reg") // @ResponseBody //表示此方法的响应结果以json格式进行数据的相应给到前端,为了防止在所有方法上添加,在类上使用注解 @RestController public JsonResult reg(User user){ userService.reg(user); return new JsonResult<>(OK); }} 关键词: