一般接口我们都要定义统一的输入和输出,以及相应的接口文档。 新建ServerResponse类和 ResponseMessage 类,其中 ServerResponse 类用于作为每个API 接口的输出类型, ResponseMessage 作为枚举类,定义每一次操作的类型。 因为这里涉及到了序列化和反序列化,需要引入 jackson-databind 依赖
<!-- jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version><type>bundle</type></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());
}
}
测试成功
