一般接口我们都要定义统一的输入和输出,以及相应的接口文档。 新建ServerResponse类和 ResponseMessage 类,其中 ServerResponse 类用于作为每个API 接口的输出类型, ResponseMessage 作为枚举类,定义每一次操作的类型。 因为这里涉及到了序列化和反序列化,需要引入 jackson-databind 依赖

    1. <!-- jackson-databind -->
    2. <dependency>
    3. <groupId>com.fasterxml.jackson.core</groupId>
    4. <artifactId>jackson-databind</artifactId>
    5. <version>2.11.0</version>
    6. <type>bundle</type>
    7. </dependency>

    然后定义 ServerResponse.java 类

    package com.example.common;
    
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class ServerResponse <T> {
        private Logger logger = LoggerFactory.getLogger(getClass());
    
        @JsonProperty("status")
        private int statusCode;
    
        @JsonProperty("message")
        private String message;
    
        @JsonProperty("data")
        private T data;
    
        public void setData(T data) {
            this.data = data;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public void setStatusCode(int statusCode) {
            this.statusCode = statusCode;
        }
    
        public ServerResponse(int statusCode){
            this.statusCode = statusCode;
        }
        public ServerResponse(int statusCode, String message){
            this(statusCode);
            this.message = message;
        }
        public ServerResponse(int statusCode, String message, T data) {
            this(statusCode, message);
            this.data = data;
        }
        public  ServerResponse(int statusCode, T data) {
            this(statusCode);
            this.data = data;
        }
    
        public static <T> ServerResponse <T> setMessage (int statusCode, String message){
            return new ServerResponse(statusCode, message);
        }
    
        public  static <T> ServerResponse <T> setDetailMessage(int statusCode, T data){
            return new ServerResponse(statusCode, data);
        }
    }
    

    然后是 ResponseMessage 类

    package com.example.common;
    
    public enum ResponseMessage {
        SUCCESS(0,"SUCCESS"),
        LOGINSUCCESS(100,"登录成功!"),
        LOGINFAILED(101, "登录失败"),
        REGISTERSUCCESS(200,"注册成功"),
        REGISTERFAILED(201,"注册失败"),
        ERROR(1,"ERROR"),
        NEED_LOGIN(10,"NEED_LOGIN"),
        ILLEGAL_ARGUMENT(3,"ILLEGAL_ARGUMENT");
    
        private final int code;
        private final String desc;
    
        ResponseMessage(int code,String desc){
            this.code = code;
            this.desc = desc;
        }
    
        public int getCode() {
            return code;
        }
    
        public String getDesc() {
            return desc;
        }
    }
    

    然后新建一个 UserController.java 来试一下

    package com.example.controller;
    
    import com.example.common.ResponseMessage;
    import com.example.common.ServerResponse;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/api")
    public class UserController {
        @GetMapping("/ping")
        public ServerResponse ping(){
            return ServerResponse.setMessage(ResponseMessage.SUCCESS.getCode(), ResponseMessage.SUCCESS.getDesc());
        }
    }
    

    测试成功
    image.png