专栏首页猿GG编程如何基于SpringBoot返回一个json对象

如何基于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),作者:cuidb

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 开发中常见的功能权限管理

    一般情况下就会有权限界面,角色界面,用户界面。常用的数据表会有权限表,角色表,用户表,权限角色关联表,用户角色关联表。

    用户1956326
  • swagger2与yapi以及idea上的yapiupload插件

    开发中有的人喜欢用swagger2,也有人喜欢用yapi,总之是各有各爱,好在yapi上支持多种数据导入,也支持swagger格式,这个对于yapi的版本是有要...

    用户1956326
  • 20190709

    今天在写Springboot项目时,连接MySql时出现个错误,控制台输出::The server time zone value '�й���׼ʱ��' is...

    用户1956326
  • -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

    public void write(byte[] b,int off,int len)

    noteless
  • 设计原则之开闭原则

    所谓对扩展开放,对修改关闭,其实是设计模式里面所重点提倡的,后续所有涉及模式的介绍其实都是为了程序能够更好的扩展,提倡设计模式的本质就是为了减少 增加一点功能而...

    止术
  • Java 函数式编程和 lambda 表达式

    函数式编程更多时候是一种编程的思维方式,是种方法论。函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做。说白了,...

    芋道源码
  • C++之多继承

    C++支持多继承,其它的面向对象编程语言几乎都不支持多继承。而多继承一旦使用不当就会造成二义性。这可能就是其它语言都不支持多继承的原因。实际来看,几乎没有使用多...

    zy010101
  • 对象与类(Java学习-2)

    我个人的看法是,C语言是面向过程的,更多的是算法+数据结构,一个程序成百上千的“过程”,以至于特别的繁琐;某天某人推出了一个“面向对象的架构”,先在关系数据库验...

    营琪
  • Head First设计模式——蝇量模式和解释器模式

    在一个设计房子的平台中,周围要加上一些树,树有一个坐标XY坐标位置,而且可以根据树的年龄动态将自己绘制出来。如果我们创建许多树之后,会有许多树的实例对象。使用一...

    SpringSun
  • Java方法的嵌套与递归调用

    方法嵌套的概念其实比较好理解,就是在调用方法的过程中又遇到了方法的调用,在刚开始接触的时候虽然在逻辑上能够理解为什么运行结果是这样的,但是对于代码执行的过程还是...

    聚沙成塔

扫码关注云+社区

领取腾讯云代金券