java通用响应体封装(Multi)
前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是封装的是返回结果集为list的response。
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. 定义数据结构体
我们可以定义一个描述集合数量的totalCount。另外需要定义一个泛型的集合体。
public class MultiDataDTO<T> {
// 总数量
private int totalCount;
// 集合数据
private Collection<T> items;
public MultiDataDTO() {
}
public MultiDataDTO(Collection<T> items) {
this.items = items;
}
public MultiDataDTO(int totalCount, Collection<T> items) {
this.totalCount = totalCount;
this.items = items;
}
public int getTotalCount() {
return this.totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public Collection<T> getItems() {
return this.items;
}
public void setItems(Collection<T> items) {
this.items = items;
}
}
3. 数据响应实体类
继承Response类,将第二步的结果体引入进来
public class MultiResponse<T> extends Response {
// 数据
private MultiDataDTO<T> data;
public MultiResponse() {
}
public MultiDataDTO<T> getData() {
return this.data;
}
public void setData(MultiDataDTO<T> data) {
this.data = data;
}
public static MultiResponse buildSuccess() {
return buildSuccess((Collection)null);
}
public static <T> MultiResponse<T> buildSuccess(Collection<T> items) {
int totalCount = items == null ? 0 : items.size();
return buildSuccess(items, totalCount);
}
public static <T> MultiResponse<T> buildSuccess(Collection<T> items, int totalCount) {
MultiResponse response = new MultiResponse();
response.setSuccess();
response.setData(new MultiDataDTO(totalCount, items));
return response;
}
public static MultiResponse buildFailure(String errCode, String errMessage) {
MultiResponse response = new MultiResponse();
response.setCode(errCode);
response.setMessage(errMessage);
return response;
}
}
4. 使用响应体
编辑代码,自定义接口,用MultiResponse包裹进行返回
@RestController
@RequestMapping(path = "/api/v1/student")
public class StudentController {
@GetMapping("/list")
public MultiResponse<String> getList(){
List<String> list = new ArrayList<String>();
list.add("springboot");
list.add("springcloud");
return MultiResponse.buildSuccess(list);
}
}
查看返回的响应体