java通用响应体封装(Single)
前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是我在开发中的封装的一组响应实体类
1. 响应实体体父类
响应实体父类, 父类中需要一个code,因为不管是响应消息还是数据,都要有code,其他的字段可以根据需要自行封装。
public class Response implements Serializable {
private static final long serialVersionUID = 1L;
private String code;
private String message;
/**
* @title 失败消息
* @param errCode
* @param errMessage
* @return
*/
public static Response buildFailure(String errCode, String errMessage) {
Response response = new Response();
response.setCode(errCode);
response.setMessage(errMessage);
return response;
}
/**
* @title 成功消息
* @return
*/
public static Response buildSuccess() {
Response response = new Response();
response.setSuccess();
return response;
}
public boolean isSuccess() {
return ResponseCode.SUCCESS.code.equals(this.code);
}
protected void setSuccess() {
this.code = ResponseCode.SUCCESS.code;
}
public Response() {
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "Response{" +
"code='" + code + '\'' +
", message='" + message + '\'' +
'}';
}
}
2. 定义响应状态码枚举类
枚举类用来定义项目中要使用到的状态码
public enum ResponseCode {
SUCCESS("200");
public final String code;
private ResponseCode(String code) {
this.code = code;
}
}
3. 数据响应实体类
继承Response类,并且需要添加一个data属性,用来存储响应数据
public class SingleResponse<T> extends Response {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public static SingleResponse buildSuccess() {
return buildSuccess((Object)null);
}
public static <T> SingleResponse<T> buildSuccess(T data) {
SingleResponse response = new SingleResponse();
response.setSuccess();
response.setData(data);
return response;
}
public static SingleResponse buildFailure(String errCode, String errMessage) {
SingleResponse response = new SingleResponse();
response.setCode(errCode);
response.setMessage(errMessage);
return response;
}
}
4. 使用响应体
编辑代码,自定义接口,用SingleResponse包裹进行返回
/**
* @author gf
* @date 2022/11/3
*/
@RestController
@RequestMapping(path = "/api/v1/student")
public class StudentController {
@GetMapping("/notice")
public SingleResponse<String> getTeacherNotice(){
return SingleResponse.buildSuccess("123");
}
}
查看返回的响应体