运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

springboot定义统一返回结果

运维开发网 https://www.qedev.com 2020-09-06 08:10 出处:51CTO 作者:FighterLiu
springboot统一返回结果result

前后端分离项目中后端开发需要写相应的接口,定义统一的返回格式有利于提高开发效率和沟通的成本。通常返回的格式主要如下两种:

1. 只返回相应的状态,格式如下:
{
    "code": "200",
    "msg": "SUCCESS"
}
2. 返回相应的状态及数据,格式如下:
{
    "code": "200",
    "msg": "查询成功",
    "result": {
        "id": 10,
        "name": "张三",
        "emil": "[email protected]",
        "phone": null,
        "address": "测试地址"
    }
}
状态代码定义如下:

code : 请求处理状态

• 200: 请求处理成功

• 400: 请求处理失败

• 500: 服务器内部错误

• 401未认证(签名错误)

• 404接口不存在

Springboot中我们可以使用泛型来定义统一的返回结果:

  1. 先定义只返回状态的Result
package com.example.demo.base;

import com.alibaba.fastjson.JSON;

public class Result {
    private String code;
    private String msg;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}
定义即有数据又有返回状态的DateResult
package com.example.demo.base;

import java.io.Serializable;

public class DateResult<T> extends Result implements Serializable {
    private T result;

    public T getResult() {
        return (T) result;
    }

    public void setResult(T result) {
        this.result = result;
    }

}
定义响应码枚举
package com.example.demo.base;

/**
 * 响应码枚举
 */
public enum ResultCode {
    SUCCESS("200"), //成功
    FAIL("400"), //失败
    UNAUTHORIZED("401"), //未认证(签名错误)
    NOT_FOUND("404"), //接口不存在
    INTERNAL_SERVER_ERROR("500");//服务器内部错误

    private final String code;

    ResultCode(String code) {
        this.code = code;
    }

    public String code() {
        return code;
    }
}
在Controller类中使用方法如下:
package com.example.demo.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.base.DateResult;
import com.example.demo.base.Result;
import com.example.demo.base.ResultCode;
import com.example.demo.entity.User;

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/update")
    public Result updateUser(@RequestParam Integer id) {
        Result result = new Result();
        //相应的逻辑更新逻辑......... 假如更新成功
        result.setCode(ResultCode.SUCCESS.code());
        result.setMsg("更新成功");
        return result;
    }

    @RequestMapping("/detail")
    public DateResult<User> queryUser(@RequestParam Integer id) {
        User user = new User();
        user.setId(10);
        user.setName("张三");
        user.setEmil("[email protected]");
        user.setAddress("测试地址");
        DateResult<User> dateResult = new DateResult<User>();
        dateResult.setCode(ResultCode.SUCCESS.code());
        dateResult.setMsg("查询成功");
        dateResult.setResult(user);
        return dateResult;
    }
}
实体类User代码如下:
package com.example.demo.entity;

import java.io.Serializable;

import com.alibaba.fastjson.JSON;

public class User implements Serializable {
    private Integer id;
    private String  name;
    private String  emil;
    private String  phone;
    private String  address;

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

    public String getEmil() {
        return emil;
    }

    public void setEmil(String emil) {
        this.emil = emil;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}
先测试没有数据的返回格式,测试结果如下:

springboot定义统一返回结果

测试有返回数据的格式,测试结果如下:

springboot定义统一返回结果

如上的返回结果,我们需要在controller类中每次都需要new一个返回对象比较麻烦,我们可以新建一个ResultUtil
package com.example.demo.base;

/**
 * 响应结果生成工具
 */
public class ResultUtil {
    private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";

    public static Result genSucce***esult() {

        Result result = new Result();
        result.setCode(ResultCode.SUCCESS.code());
        result.setMsg(DEFAULT_SUCCESS_MESSAGE);
        return result;
    }

    public static <T> DateResult<T> genSucce***esult(T data) {
        DateResult<T> dateResult = new DateResult<T>();
        dateResult.setCode(ResultCode.SUCCESS.code());
        dateResult.setMsg(DEFAULT_SUCCESS_MESSAGE);
        dateResult.setResult(data);
        return dateResult;
    }

}
controller 类的代码修改如下:
package com.example.demo.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.base.DateResult;
import com.example.demo.base.Result;
import com.example.demo.base.ResultUtil;
import com.example.demo.entity.User;

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/update")
    public Result updateUser(@RequestParam Integer id) {

        return ResultUtil.genSucce***esult();
    }

    @RequestMapping("/detail")
    public DateResult<User> queryUser(@RequestParam Integer id) {
        User user = new User();
        user.setId(10);
        user.setName("张三");
        user.setEmil("[email protected]");
        user.setAddress("测试地址");
        return ResultUtil.genSucce***esult(user);
    }
}

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消