【SpringBoot商城秒杀系统项目实战02】优雅代码编写之封装json输出
2019-05-27 15:55
666 查看
搭建起了SpringBoot环境之后,那么就可以开启项目了,我们需要考虑优雅代码编写。
我们知道MVC模式Controller类里面一般有两大返回值:
- rest api的json输出
- 页面
一般来说,服务端和客户端要做一个接口的约定。
一般封装的json数据代表意义:
{ "code":0 //500100代表库存不足 "msg":"success" //代表code对应的相应信息 "data":"data" //可能是对象,也可能是一个数组 }
1.新建result包,新建Result结果的封装类。
注意:因为返回的data不知道是什么类型,那么定义一个泛型。
public class Result<T> { private int code; private String msg; private T data; //success private Result(T data) { this.code=0; this.msg="success"; this.data=data; } //error private Result(CodeMsg cm) { if(cm==null) { return; } this.code=cm.getCode(); this.msg=cm.getMsg(); } //成功 public static <T> Result<T> success(T data){ return new Result<T>(data) ; } // 失败 public static <T> Result<T> error(CodeMsg sm) {//CodeMsg包含了code和msg return new Result<T>(sm); } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; }
新建CodeMsg,对处理结果成功或者错误的情况做一个CodeMsg的封装。成功的时候,只返回数据。失败的话,那么就返回CodeMsg。(里面包含错误码以及错误信息)
/** * 成功的时候,只返回数据。 失败的话,那么就返回CodeMsg。(里面包含错误码以及错误信息) * */ public class CodeMsg { private int code; private String msg; //通用异常 public static CodeMsg SUCCESS=new CodeMsg(0,"success"); public static CodeMsg SERVER_ERROR=new CodeMsg(500100,"服务端异常!"); public static CodeMsg BIND_ERROR=new CodeMsg(500101,"参数校验异常:%s"); public static CodeMsg REQUEST_ILLEAGAL=new CodeMsg(500102,"非法请求!"); public static CodeMsg MIAOSHA_FAIL=new CodeMsg(500103,"秒杀失败!"); public static CodeMsg ACCESS_LIMIT=new CodeMsg(500104,"达到访问限制次数,访问太频繁!"); //登录模块异常 public static CodeMsg SESSION_ERROR=new CodeMsg(500210,"session失效!"); public static CodeMsg PASSWORD_EMPTY=new CodeMsg(500211,"密码不能为空!"); public static CodeMsg MOBILE_EMPTY=new CodeMsg(500212,"手机号不能为空!"); public static CodeMsg MOBILE_ERROR=new CodeMsg(500213,"手机号格式错误!"); public static CodeMsg MOBILE_NOTEXIST=new CodeMsg(500214,"手机号号码不存在!"); public static CodeMsg PASSWORD_ERROR=new CodeMsg(500215,"密码错误!"); //订单模块异常 public static CodeMsg ORDER_NOT_EXIST=new CodeMsg(500410,"订单不存在!"); //秒杀模块异常 public static CodeMsg MIAOSHA_OVER_ERROR=new CodeMsg(500500,"商品秒杀完毕,库存不足!"); public static CodeMsg REPEATE_MIAOSHA=new CodeMsg(500500,"不能重复秒杀!"); public CodeMsg(int code,String msg) { this.code=code; this.msg=msg; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } //返回一个带参数的错误码 public CodeMsg fillArgs(Object...args) {//变参 int code=this.code; //message是填充了参数的message String message=String.format(this.msg, args); return new CodeMsg(code,message); } @Override public String toString() { return "CodeMsg"; } }Controller里面的代码,使用了封装类之后的返回效果更赏心悦目。注意:@ResponseBody注解,如果返回给前端json数据的时候,需要使用该注解!!!
[code] @Controller @RequestMapping("/demo")//注意!!!加了一个路径 public class DemoController { @RequestMapping("/") @ResponseBody public String home() { return "hello world"; } @RequestMapping("/hello") @ResponseBody public Result<String> hello() {//0代表成功 return Result.success("hello sss"); } @RequestMapping("/helloError") @ResponseBody public Result<String> helloError() {//0代表成功 return Result.error(CodeMsg.SERVER_ERROR); } }
成功显示:
相关文章推荐
- 【SpringBoot商城秒杀系统项目实战07】通用缓存Key的设计与封装
- 【SpringBoot商城秒杀系统项目实战21】高并发秒杀系统接口优化 RabbitMQ异步下单
- 【SpringBoot商城秒杀系统项目实战23】安全优化 数学图形验证码
- 【SpringBoot商城秒杀系统项目实战08】两次MD5加密设计
- 【SpringBoot商城秒杀系统项目实战03】集成Thymeleaf做页面模板
- 【SpringBoot商城秒杀系统项目实战22】安全优化 秒杀接口地址隐藏
- 【SpringBoot商城秒杀系统项目实战04】集成Mybatis与druid
- 【SpringBoot商城秒杀系统项目实战11】分布式Session
- 【SpringBoot商城秒杀系统项目实战17】页面优化技术(页面缓存+URL缓存+对象缓存)
- 【SpringBoot商城秒杀系统项目实战19】秒杀静态化+订单详情静态化
- 【SpringBoot商城秒杀系统项目实战06】安装与集成redis
- 【SpringBoot商城秒杀系统项目实战05】数据库设计与对应的domain对象
- 【SpringBoot商城秒杀系统项目实战15】订单详情页
- 【SpringBoot商城秒杀系统项目实战16】使用JMeter压测秒杀系统
- 【SpringBoot商城秒杀系统项目实战18】页面优化技术-商品详情页面静态化(前后端分离)
- 【SpringBoot商城秒杀系统项目实战12】商品列表页
- 【SpringBoot商城秒杀系统项目实战24】安全优化 接口限流防刷
- 【SpringBoot商城秒杀系统项目实战13】秒杀商品详情页+秒杀倒计时功能实现
- 【SpringBoot商城秒杀系统项目实战20】高并发秒杀接口优化
- 【SpringBoot商城秒杀系统项目总结】 项目的亮点和难点及问题解决(源码地址)