背景:
开发中为了前后端交互返回结果统一,对于rest的服务,都是json格式。今天我们介绍一下,统一结果封装返回以及json格式转化的相关的内容。
依赖
lombok一个为了简化代码,阿里的json转化工具,google的json转化工具。
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
<!--gson-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
统一结果类
package com.elite.springboot.Common;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 统一结果
*/
@Accessors(chain=true)
@Data
public class R {
//请求返回的代码
private Integer code;
//请求的信息
private String msg;
//数据
private Object data;
//成功
public static R ok(Object data){
return new R().setCode(200).setMsg("成功").setData(data);
}
//成功
public static R ok(Integer code,String msg,Object data){
return new R().setCode(code).setMsg(msg).setData(data);
}
//失败
public static R fail(){
return new R().setCode(400).setMsg("请求失败!");
}
//失败
public static R fail(Integer code,String msg){
return new R().setCode(code).setMsg(msg).setData(null);
}
}
我们还可以自定义统一的错误编码格式,为了出错方便进行排查。
实体类
package com.elite.springboot.entity;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
//用户
@Data
@Getter
@Setter
public class User {
private String userName;
private Integer age;
private String address;
}
返回格式
使用注解@RestController,请求返回会自动转化为json格式的,我们也可以返回字符串,自己转化为json格式。使用gson或者fastjson.
package com.elite.springboot.controller;
import com.alibaba.fastjson.JSON;
import com.elite.springboot.Common.R;
import com.elite.springboot.entity.User;
import com.google.gson.Gson;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping
@RestController
//@Controller
//@ResponseBody
public class CommonController {
//不带返回数据的格式
@GetMapping("/ok1")
public R ok1(){
return R.ok(null);
}
//因为注解restcontroller => @controller + @ResponseBody
//带有返回数据的json格式
@GetMapping("/ok2")
public R ok2(){
User u = new User();
u.setUserName("牛奶糖");
u.setAge(22);
u.setAddress("xxx省");
return R.ok(200,"成功",u);
}
//带有返回数据的json格式
@GetMapping("/fail")
public R fail(){
return R.fail();
}
//使用json转换工具转换返回数据fastjson
@GetMapping("/fastjson")
public String fastjson(){
User u = new User();
u.setUserName("牛奶糖");
u.setAge(22);
u.setAddress("xxx省");
R r = R.ok(u);
return JSON.toJSONString(r);
}
//使用json转换工具转换返回数据fastjson
@GetMapping("/gson")
public String gson(){
User u = new User();
u.setUserName("牛奶糖");
u.setAge(22);
u.setAddress("xxx省");
R r = R.ok(u);
Gson gson = new Gson();
return gson.toJson(r);
}
}
测试结果