Springboot封装统一格式的参数JSON

背景:

	开发中为了前后端交互返回结果统一,对于rest的服务,都是json格式。今天我们介绍一下,统一结果封装返回以及json格式转化的相关的内容。

依赖

lombok一个为了简化代码,阿里的json转化工具,google的json转化工具。

    
    
      com.alibaba
      fastjson
      1.2.80
    
    
    
      com.google.code.gson
      gson
      2.8.9
    
    
      org.projectlombok
      lombok
      true
    

统一结果类

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);
    }
}

测试结果
Springboot封装统一格式的参数JSON_第1张图片
Springboot封装统一格式的参数JSON_第2张图片
Springboot封装统一格式的参数JSON_第3张图片
Springboot封装统一格式的参数JSON_第4张图片

你可能感兴趣的:(spring,boot,json,java)