您的位置:首页 > 编程语言 > Java开发

spring boot 统一JSON格式的接口返回结果的实现

2019-10-08 15:30 1806 查看

前后端分离的项目开发前,会提前规定好数据返回格式,本文以JSON为例。

第一步,定义好JavaBean。

package com.yclouds.myhelper.web.response;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yclouds.myhelper.web.error.code.BaseEnumError;
import java.io.Serializable;
import lombok.Data;

/**
* 所有服务统一响应数据格式
*
* @author ye17186
* @version 2019/2/15 14:40
*/
@Data
public class ApiResp<T> implements Serializable {

private static final long serialVersionUID = 9211889136173018364L;

/**
* 正常响应码
*/
private static final int SUCCESS_CODE = 0;

/**
* 正常响应消息
*/
private static final String SUCCESS_MSG = "SUCCESS";

/**
* 错误码
*/
private int code = SUCCESS_CODE;

/**
* 错误信息
*/
private String msg = SUCCESS_MSG;

/**
* 响应内容,默认为null
*/
private T data = null;

/**
* 是否的正常响应
*
* @return true=正常;false=异常
*/
@JsonIgnore
public boolean isOK() {
return code == SUCCESS_CODE;
}

/**
* 无data的正常返回
*/
public static ApiResp retOK() {
return new ApiResp();
}

/**
* 有data的正常返回
*
* @param data data内容
* @param <T> data类型
*/
public static <T> ApiResp<T> retOK(T data) {
ApiResp<T> response = new ApiResp<>();
response.setData(data);
return response;
}

/**
* 无data的失败返回
*
* @param error 错误类型
*/
public static ApiResp retFail(BaseEnumError error) {
return retFail(error.getCode(), error.getMsg());
}

/**
* 有data的失败返回
*
* @param error 错误类型
* @param data 详细错误信息
*/
public static <T> ApiResp<T> retFail(BaseEnumError error, T data) {
return retFail(error.getCode(), error.getMsg(), data);
}

/**
* 无data的失败返回
*
* @param code 错误码
* @param msg 错误信息
*/
public static <T> ApiResp<T> retFail(int code, String msg) {
ApiResp<T> response = new ApiResp<>();
response.setCode(code);
response.setMsg(msg);
return response;
}

/**
* 有data的失败返回
* <br>
* 失败返回的场景不多,所以没有严格要求T泛型
*
* @param code 错误码
* @param msg 错误信息
*/
public static <T> ApiResp<T> retFail(int code, String msg, T data) {
ApiResp<T> response = new ApiResp<>();
response.setCode(code);
response.setMsg(msg);
response.setData(data);
return response;
}
}

第二步,在Controller中使用

@GetMapping("/test1")
public ApiResp test1() {

return ApiResp.retOK("Hello World");
}

@GetMapping("/test2")
public ApiResp test2() {

return ApiResp.retFail(BaseEnumError.SYSTEM_NO_LOGIN);
}

可以在Postman查看具体的响应内容如下:

当然,ApiResp中的泛型,也可以使用复杂的数据对象。实际开发中,每种错误响应都有自己的响应码code,和错误信息msg,示例中统一定义了一个BaseEnumError的枚举类,具体内容可参照我的github项目https://github.com/ye17186/myhelper-spring-boot-starter

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息