springboot 统一返回接口结果
基于springboot 2.6.6 jdk1.8
代码地址:github仓库地址
api-result-package module
更多系列教程请关注公众号’coderlike’
如果觉得有帮助希望能关注下公众号
对于有返回值的接口都应该封装统一的包装类型,方便前后端联调
返回风格
{
"code": "code value",
"data": "return value",
"msg": "message"
}
定义code枚举
package org.example.enums;
public enum ApiCode {
OK(1000,"SUCCESS"),
ERROR(2000,"Error"),
PARAM_ERROR(2001,"parameters error"),
EMAIL_FORMATTER_ERROR(2002,"邮箱格式错误"),
//...
;
private int code;
private String message;
ApiCode(int code,String message){
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
定义结果类
package org.example.result;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import org.example.enums.ApiCode;
import java.io.Serializable;
@Data//lombok注解
@JsonInclude(JsonInclude.Include.NON_NULL)//jackson注解,表示属性为null时就不序列化该属性
public class R<T> implements Serializable {
private int code;
private T data;
private String message = "";
public static R<?> success(){
R r = new R();
r.code = ApiCode.OK.getCode();
return r;
}
public static<T> R<T> success(T obj){
R<T> r = new R<>();
r.code = ApiCode.OK.getCode();
r.data = obj;
return r;
}
public static<T> R<T> error(){
R<T> r = new R<>();
r.code = ApiCode.ERROR.getCode();
return r;
}
public static<T> R<T> error(String message){
R<T> r = new R<>();
r.code = ApiCode.ERROR.getCode();
r.message = message;
return r;
}
public static<T> R<T> error(ApiCode apiCode){
R<T> r = new R<>();
r.code = apiCode.getCode();
r.message = apiCode.getMessage();
return r;
}
public static<T> R<T> error(ApiCode apiCode,String message){
R<T> r = new R<>();
r.code = apiCode.getCode();
r.message = message;
return r;
}
}
写个Controller测试下
User.java
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private Integer age;
private Double height;
}
TestController.java
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("1")
public R<String> test1(){
return R.success("string value");
}
@GetMapping("2")
public R<User> test2(){
return R.success(User.builder()
.name("张三")
.age(11111)
.height(60d)
.build());
}
}
测试结果
- /test/1
- /test/2
TestController添加一个test3
@GetMapping("3")
public R<?> test3(){
return R.success();
}
- /test/3
去掉类R的@JsonInclude(JsonInclude.Include.NON_NULL)注解后
- /test/3
更多系列教程请关注公众号’coderlike’
如果觉得有帮助希望能关注下公众号