您的位置:首页 > Web前端 > JavaScript

【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); } }

成功显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐