springboot统一json信息返回
调用后端服务后的返回结果有多种类型
如:string,integer,boolean,list,map等,
在一个项目中,为了保持统一性,我们方法返回结果可以全部使用json数据格式
如下:
{
"code":200,
"msg":"成功",
"data":"json数据"
}其中code 是本次请求处理结果对应的状态码,msg是状态码对应的解释信息,data是要返回的数据内容,可以是任意一个对象。
封装响应信息对象
public class responseentity<t> implements serializable {
private static final long serialversionuid = 3595741978061989861l;
private integer code;//状态码
private string msg;//状态码对应信息
private t 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 t getdata() {
return data;
}
public void setdata(t data) {
this.data = data;
}
}状态码,http请求状态码有多种,使用枚举列举
如下示例:
public enum responseenum {
success(200, "成功"),
fail(-1, "失败"),
error_400(400, "错误的请求"),
error_404(404, "访问资源不存在"),
error_500(500, "服务器异常");
private integer code;
private string msg;
responseenum(integer code, string msg) {
this.code = code;
this.msg = msg;
}
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 class responseutil {
/**
* 成功返回
* @param object 返回数据
* @return
*/
public static responseentity success(object object){
responseentity resp = new responseentity();
resp.setcode(responseenum.success.getcode());
resp.setmsg(responseenum.success.getmsg());
resp.setdata(object);
return resp;
}
/**
* 成功返回 无数据
* @return
*/
public static responseentity success(){
return success(null);
}
/**
* 失败返回
* @param responseenum 响应标识
* @return
*/
public static responseentity error(responseenum responseenum){
responseentity resp = new responseentity();
resp.setcode(responseenum.getcode());
resp.setmsg(responseenum.getmsg());
return resp;
}
}spring中的控制器可以用 @controller 和 @restcontroller注解来声明,其中@controller标识当前控制器是springmvc的控制器,要返回json对象数据,需要和@responsebody注解联合使用;
@restcontroller主要用来构建restful风格接口,返回客户端的请求数据,相当于同时使用@controller和@responsebody注解。
创建pojo包及对应的实体类
public class demoentity {
private integer id;
private string name;
public integer getid() {
return id;
}
public void setid(integer id) {
this.id = id;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
}创建控制器
- @controller
@controller
public class democontroller {
@requestmapping(value = "/users", method= requestmethod.get)
@responsebody
public responseentity users(){
list<demoentity> list = new arraylist<demoentity>();
demoentity demo = new demoentity();
demo.setid(1);
demo.setname("蜗牛");
list.add(demo);
demoentity demo1 = new demoentity();
demo1.setid(2);
demo1.setname("葡萄");
list.add(demo1);
return responseutil.success(list);
}
}测试:
启动服务后,在浏览器地址栏输入http://localhost:8080/users,可以看到页面上的输出信息
{"code":200,"msg":"成功","data":[{"id":1,"name":"蜗牛"},{"id":2,"name":"葡萄"}]}- @restcontroller
@restcontroller
public class demorestcontroller {
@requestmapping(value = "/users1", method= requestmethod.get)
public responseentity users(){
list<demoentity> list = new arraylist<demoentity>();
demoentity demo = new demoentity();
demo.setid(1);
demo.setname("蜗牛");
list.add(demo);
demoentity demo1 = new demoentity();
demo1.setid(2);
demo1.setname("葡萄");
list.add(demo1);
return responseutil.success(list);
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论