controller的返回结果一般有两种:
1.Rest API JSON 输出
2.页面
目的:编写优雅的代码
实现:通过泛型对返回结果进行封装
代码如下:
一.控制层
1 /** 2 * 获取用户成功 3 * @return 4 */ 5 @RequestMapping("/getUser") 6 @ResponseBody 7 public Result<User> getUser(@RequestParam("id") int id){ 8 User user = userService.getUserById(id); 9 System.out.println(user.toString()); 10 11 return Result.success(user); 12 }
返回结果:{"code":0,"message":"SUCCESS","data":{"id":1,"name":"斗战胜佛"}}
1 /** 2 * 获取用户失败 3 * @param id 4 * @return 5 */ 6 @RequestMapping("/getUserFailed") 7 @ResponseBody 8 public Result<CodeMsg> getUserFailed(@RequestParam("id") int id){ 9 User user = userService.getUserById(id); 10 System.out.println(user.toString()); 11 12 return Result.error(CodeMsg.SERVER_ERROR); 13 }
返回结果:{"code":500100,"message":"服务端异常","data":null}
二:Result类
1 public class Result<T> { 2 3 private int code; 4 private String message; 5 private T data; 6 7 /** 8 * 成功时调用 9 * @param data 10 * @param <T> 11 * @return 12 */ 13 public static <T> Result<T> success(T data){ 14 return new Result<T>(data); 15 } 16 17 /** 18 * 失败时调用 19 * @param codeMsg 20 * @param <T> 21 * @return 22 */ 23 public static <T> Result error(CodeMsg codeMsg){ 24 return new Result<T>(codeMsg); 25 } 26 27 /** 28 * 构造方法私有化,不允许外部new Result 29 * @param data 30 */ 31 private Result(T data){ 32 this.code = 0; 33 this.message = "SUCCESS"; 34 this.data = data; 35 } 36 37 /** 38 * 构造方法私有化,不允许外部new Result 39 * @param codeMsg 40 */ 41 private Result(CodeMsg codeMsg){ 42 if (null == codeMsg) { 43 return; 44 } 45 this.code = codeMsg.getCode(); 46 this.message = codeMsg.getMessage(); 47 } 48 49 public int getCode() { 50 return code; 51 } 52 53 public void setCode(int code) { 54 this.code = code; 55 } 56 57 public String getMessage() { 58 return message; 59 } 60 61 public void setMessage(String message) { 62 this.message = message; 63 } 64 65 public T getData() { 66 return data; 67 } 68 69 public void setData(T data) { 70 this.data = data; 71 } 72 }
三:CodeMsg类
1 public class CodeMsg { 2 3 private int code; 4 private String message; 5 6 /** 7 * //通用模块异常 5001XX 8 */ 9 public static CodeMsg SUCCESS = new CodeMsg(0,"SUCCESS"); 10 public static CodeMsg SERVER_ERROR = new CodeMsg(500100,"服务端异常"); 11 12 //登陆模块异常 5002XX 13 //商品模块异常 5003XX 14 //订单模块异常 5004XX 15 //秒杀模块异常 5005XX 16 17 18 private CodeMsg(int code, String message) { 19 this.code = code; 20 this.message = message; 21 } 22 23 public int getCode() { 24 return code; 25 } 26 27 public String getMessage() { 28 return message; 29 } 30 }