如何基于SpringBoot返回一个json对象

基于SpringBoot如何返回一个json对象?

开发过程中,接口是必不可少的,那么提前约定数据格式就成了必不可少的步骤。一般情况下大家都是用json格式来传递数据,今天就用spring boot来实现一下返回json对象的步骤。

1、首先创建一个spring boot项目,在spring boot项目下写一个实体类,随便写几个属性意思意思。

public class Employee {    private String name;    private String passowod;    private String age;    private String gender;

    public String getName() {        return name;    }
    public void setName(String name) {        this.name = name;    }
    public String getPassowod() {        return passowod;    }
    public void setPassowod(String passowod) {        this.passowod = passowod;    }
    public String getAge() {        return age;    }
    public void setAge(String age) {        this.age = age;    }
    public String getGender() {        return gender;    }
    public void setGender(String gender) {        this.gender = gender;    }}

2、把controller写起来,如果习惯了写springmvc,那么写出来的代码就是这样的了,主要依赖的@Controller、@ResponseBody注解。

@Controller@RequestMapping("/employee")public class EmployeeController {
    @RequestMapping("/getEmployee")    @ResponseBody    public Employee getEmployee() {        Employee employee = new Employee();        employee.setAge("30");        employee.setGender("男");        employee.setName("杰克");        employee.setPassowod("123456");        return employee;    }
}

3、在springboot下写法就简单了一些,用的是@RestController,这个注解就可以替代@Controller+@ResponseBody这两个注解的作用。

@RestControllerpublic class EmployeeController {
    @RequestMapping("/getEmployee")     public Employee getEmployee() {        Employee employee = new Employee();        employee.setAge("30");        employee.setGender("男");        employee.setName("杰克");        employee.setPassowod("123456");        return employee;    } }

4、执行后得到的页面上就展示出了employee对象。

{"name":"杰克","passowod":"123456","age":"30","gender":"男"}

5、而我们要返回json格式,就要先了解http请求的返回的状态码都有哪些,了解了这些状态码才可以更好的把后端状态返回给前端。

HTTP返回的状态码也分以下几大类状态。

1xx 信息提示

2xx 成功

3xx 重定向

4xx 客户端错误

5xx 服务器错误

我们常见的主要几个状态

200 成功

401 登录失败

404 未找到

500 内部服务器错误

我们给前端返回的json对象,这个时候返回的状态码也是参照http状态码。返回json对象的时候要把状态码封装进去,同时把employee也要封装进去,那就要一个通用类来响应前端请求。例子中自定义了个操作成功的状态码,我们也可以定义其他的状态码。

public class ResultJson<T> {
    private int code;
    private String msg;
    private T data;
    /**     * 操作成功     */    public static final ResultJson SUCCESS_RESULT = new ResultJson(0, "操作成功!!!");
    /**     * 系统异常     */    public static final ResultJson SYSTEM_ERROR_RESULT = new ResultJson(1, "系统异常, 请稍后重试!!!");
    /**     * 登录异常     */    public static final ResultJson LOGIN_ERROR_RESULT = new ResultJson(2, "登录信息已失效, 请重新登录!!!");
    /**     * 请求参数异常     */    public static final ResultJson PARAM_ERROR_RESULT = new ResultJson(3, "请求参数异常, 请重试!!!");
    /**     * 操作失败     */    public static final ResultJson FAIL_RESULT = new ResultJson(4, "操作失败, 请重试!!!");

    /**     * 默认错误编码     */    public static final int ERROR = 9; 
    public ResultJson() {    }
    public ResultJson(T data) {        this.code = ResultJson.SUCCESS_RESULT.getCode();        this.msg = ResultJson.SUCCESS_RESULT.getMsg();        this.data = data;    }
    public ResultJson(int code, String msg) {        this.code = code;        this.msg = msg;    }
    public ResultJson(int code, String msg, T data) {        this.code = code;        this.msg = msg;        this.data = data;    }
    public ResultJson(ResultJson param, T data) {        this.code = param.getCode();        this.msg = param.getMsg();        this.data = data;    }
    public static <T> ResultJson<T> error(String message) {        return (ResultJson<T>) new ResultJson(ERROR, message);    }
    public static <T> ResultJson<T> data(T data) {        return (ResultJson<T>) new ResultJson(SUCCESS_RESULT, data);    }
    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;    }}

6、通过这个响应通用类,传啥都不是问题,提前写好返回常量还是很有用的,比如ResultJson.SUCCESS_RESULT表示成功,ResultJson.SYSTEM_ERROR_RESULT 表示系统异常,等等。

7、接下来写一个返回json的方法,新方法和之前的getEmployee类似,就是把目前的对象给它加上一层壳子,让他完全符合json格式。

@RequestMapping("/getEmployeeJson")public  ResultJson   getEmployeeJson() {    Employee employee = new Employee();    employee.setAge("30");    employee.setGender("男");    employee.setName("杰克");    employee.setPassowod("123456");
    return ResultJson.data(employee);}

8、此时返回的结果就不一样啦,返回的信息有标记的状态码,也有文字提醒,还是返回的数据,完美。

{"code":0,"msg":"操作成功!!!","data":{"name":"杰克","passowod":"123456","age":"30","gender":"男"}}

最后要说的简单功能写出来用文字描述出来还是挺困难的,会用是一方面,写是另外一方面。

原文发布于微信公众号 - 猿GG编程(taipingzaixian)

原文发表时间:2019-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券