Result类
package com.panxg.common.result;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
@ApiModel(value="Result对象", description="Result对象")
public class Result<T> implements Serializable {
@ApiModelProperty(value = "返回状态")
private Integer status;
@ApiModelProperty(value = "返回状态码")
private Integer code;
@ApiModelProperty(value = "返回描述")
private String msg;
@ApiModelProperty(value = "返回数据")
private T data;
}
ResultUtil 类
package com.panxg.common.result;
import cn.hutool.core.util.ArrayUtil;
public class ResultUtil {
public static <T> Result<T> success() {
return ResultUtil.getResultSuccess();
}
public static <T> Result<T> success(ResultEnum resultEnum) {
return ResultUtil.getResult(resultEnum);
}
public static <T> Result<T> success(ResultEnum resultEnum,T data) {
Result<T> result = ResultUtil.getResult(resultEnum);
result.setData(data);
return result;
}
public static <T> Result<T> successMsg(String msg) {
Result<T> resultSuccess = ResultUtil.getResultSuccess();
resultSuccess.setMsg(msg);
return resultSuccess;
}
public static <T> Result<T> successData(T data) {
Result<T> resultSuccess = ResultUtil.getResultSuccess();
resultSuccess.setData(data);
return resultSuccess;
}
public static <T> Result<T> success(String msg, T data) {
Result<T> resultSuccess = ResultUtil.getResultSuccess();
resultSuccess.setData(data);
resultSuccess.setMsg(msg);
return resultSuccess;
}
public static <T> Result<T> failure() {
return ResultUtil.getResultFailure();
}
public static <T> Result<T> failure(ResultEnum resultEnum) {
return ResultUtil.getResult(resultEnum);
}
public static <T> Result<T> failure(ResultEnum resultEnum,T data) {
Result<T> result = ResultUtil.getResult(resultEnum);
result.setData(data);
return result;
}
public static <T> Result<T> failureMsg(String msg) {
return ResultUtil.getResultFailure(msg);
}
public static <T> Result<T> failureData(T data) {
Result<T> resultFailure = ResultUtil.getResultFailure();
resultFailure.setData(data);
return resultFailure;
}
public static <T> Result<T> failure(String msg, T data) {
Result<T> resultFailure = ResultUtil.getResultFailure();
resultFailure.setData(data);
resultFailure.setMsg(msg);
return resultFailure;
}
public static <T> Result<T> getResultSuccess() {
Result<T> result = new Result<>();
result.setStatus(ResultConstant.RESULT_STATUS_SUCCESS);
result.setMsg(ResultConstant.RESULT_MSG_SUCCESS);
result.setCode(ResultConstant.RESULT_CODE_DEFAULT);
return result;
}
public static <T> Result<T> getResultFailure(String... msg) {
Result<T> result = new Result<>();
result.setStatus(ResultConstant.RESULT_STATUS_FAILURE);
if (ArrayUtil.isEmpty(msg)) {
result.setMsg(ResultConstant.RESULT_MSG_FAILURE);
}else{
result.setMsg(msg[0]);
}
result.setCode(ResultConstant.RESULT_CODE_DEFAULT);
return result;
}
public static <T> Result<T> getResult() {
Result<T> result = new Result<>();
result.setStatus(ResultConstant.RESULT_STATUS_SUCCESS);
result.setMsg(ResultConstant.RESULT_MSG_SUCCESS);
result.setCode(ResultConstant.RESULT_CODE_DEFAULT);
return result;
}
public static <T> Result<T> getResult(ResultEnum resultEnum) {
Result<T> result = new Result<>();
result.setStatus(resultEnum.getStatus());
result.setMsg(resultEnum.getMsg());
result.setCode(resultEnum.getCode());
return result;
}
}
ResultEnum 类
package com.panxg.common.result;
public enum ResultEnum {
LOGIN_OUT_SUCCESS(1, 200, "退出成功!"),
LOGIN_IN_SUCCESS(1, 200, "登录成功!"),
AUTHORITY_FAILURE(-1, 200, "权限不足!"),
LOGIN_FAILURE_200401(-1, 200401, "登录失败!"),
LOGIN_FAILURE_200402(-1, 200402, "登录信息已过期!"),
LOGIN_FAILURE_200403(-1, 200403, "未登录,请先登录!"),
OPERATE_SUCCESS(1, 200, "操作成功!"),
OPERATE_FAILURE(-1, 200, "操作失败!"),
QUERY_SUCCESS(1, 200, "查询成功!"),
QUERY_FAILURE(-1, 200, "查询失败!"),
DELETE_SUCCESS(1, 200, "删除成功!"),
DELETE_FAILURE(-1, 200, "删除失败!"),
INSERT_SUCCESS(1, 200, "新增成功!"),
INSERT_FAILURE(-1, 200, "新增失败!"),
UPDATE_SUCCESS(1, 200, "修改成功!"),
UPDATE_FAILURE(-1, 200, "修改失败!"),
SQL_FAILURE(-1, 200, "数据库异常!"),
HTTP_FAILURE(-1, 200, "请求异常!"),
SERVICE_FAILURE(-1, 200, "服务器异常!"),
PARAM_ERROR(-1,200,"请求参数有误"),
WX_PAY_EXCEPTION(-1,200,"微信异常"),
;
private Integer status;
private Integer code;
private String msg;
ResultEnum(Integer status, Integer code, String msg) {
this.status = status;
this.code = code;
this.msg = msg;
}
ResultEnum( Integer code, String msg) {
this.status = 0;
this.code = code;
this.msg = msg;
}
public ResultEnum setStatus(Integer status) {
this.status = status;
return this;
}
public ResultEnum setCode(Integer code) {
this.code = code;
return this;
}
public ResultEnum setMsg(String msg) {
this.msg = msg;
return this;
}
public Integer getStatus() {
return status;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
ResultConstant 类
package com.panxg.common.result;
public class ResultConstant {
public static final Integer RESULT_STATUS_SUCCESS = 1;
public static final Integer RESULT_STATUS_FAILURE = -1;
public static final Integer RESULT_CODE_DEFAULT = 200;
public static final String RESULT_MSG_SUCCESS = "操作成功";
public static final String RESULT_MSG_FAILURE = "操作失败";
}
使用自定义注解判断是否需要封装结果集
ResultAnnotation
package com.panxg.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ResultAnnotation {
boolean required() default true;
}
统一结果集封装
ResultResponseBodyAdviceImpl
package com.panxg.common.result;
import com.panxg.common.annotation.ResultAnnotation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import javax.validation.constraints.NotNull;
@Slf4j
@ControllerAdvice
public class ResultResponseBodyAdviceImpl implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(@NotNull MethodParameter returnType, @NotNull Class<? extends HttpMessageConverter<?>> converterType) {
ResultAnnotation methodAnnotation = returnType.getMethodAnnotation(ResultAnnotation.class);
if (methodAnnotation!=null){
return methodAnnotation.required();
}
return false;
}
@Override
public Object beforeBodyWrite(Object body,
@NotNull MethodParameter returnType,
@NotNull MediaType selectedContentType,
@NotNull Class<? extends HttpMessageConverter<?>> selectedConverterType,
@NotNull ServerHttpRequest request,
@NotNull ServerHttpResponse response) {
if (log.isDebugEnabled()) {
log.debug("ResultResponseBodyAdviceImpl.beforeBodyWrite:{}",body);
}
if (body instanceof Result) {
return body;
}
return ResultUtil.successData(body);
}
}