拿走了什么
今天来说下Spring Boot中统一返回结果的封装。
为什么要封装结果?
来看一张没有封装的。
状态码
的结果,前端会根据这个结果来提示用户操作的结果,像这样成功的会返回
操作成功
的消息提示
步骤
首先创建一个枚举用来RetCode
public enum RetCode {
//成功
SUCCESS(200),
//失败
FAIL(400),
//错误
FALSE(404),
//内部错误
ERROR(500);
private int code;
private RetCode(Integer code){
this.code = code;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
复制代码
里面code的数值你可以根据实际来自定义~ 然后对结果处理的一个类
public class RetResult {
private Integer code;
private String msg;
private Object data;
public RetResult(){
this.code = Integer.valueOf(0);
this.msg = "";
this.data = null;
}
/**
*返回状态码、信息、以及数据
*/
public RetResult(Integer code, String msg, Object data) {
this.code = code;
this.msg = "";
this.data = null;
}
/**
*只返回状态码,以及信息可以用于失败时候来使用
*/
public RetResult(Integer code, String msg) {
this.code = code;
this.msg = msg;
this.data = null;
}
/**
*只返回状态码和数据
*/
public RetResult(Integer code, Object data) {
this.code = code;
this.msg = "";
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
复制代码
其中msg
是你想要返回的信息,code
就是自定义的状态码了,data
是要返回的数据,这里我采用了Object
类型。而且这里我写了几个重载方法,可以根据自己的需求来灵活调整
改造Service、Controller
把我们上节UserService
类改造一下
public RetResult queryUserById(Map<String,Object> map){
if(map.get("user_id") == null){
return new RetResult(RetCode.FAIL.getCode(),"id不能为空");
}
return new RetResult(RetCode.SUCCESS.getCode(),userMapper.queryUserById(Long.parseLong(map.get("user_id").toString())));
}
复制代码
就是把我们之前返回的数据给放到Data中了,然后UserController
的改造
@RequestMapping(value = "/user/getUser")
public RetResult getUser(@RequestBody Map<String ,Object> map){
return userService.queryUserById(map);
}
复制代码
其中Controller
我们可以集中来处理Exception
这个以后会加上。 先测试如果我们先不传数据返回的信息: