package xxx.xxx.utils.algoUtils;
import lombok.Data;
import java.io.Serializable;
@Data
public class Result<T> implements Serializable {
private static final long serialVersionUID = 6308315887056661996L;
private Integer code;
private String message;
private T data;
public Result setResult(ResultCode resultCode) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
return this;
}
public Result setResult(ResultCode resultCode, T data) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
this.setData(data);
return this;
}
}
package xxx.xxx.utils.algoUtils;
public class ResultResponse {
private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";
// 成功只返回状态
public static Result success() {
return new Result().setResult(ResultCode.SUCCESS);
}
// 成功返回数据
public static Result success(Object data) {
return new Result().setResult(ResultCode.SUCCESS, data);
}
// 失败只返回状态
public static Result failure(ResultCode resultCode) {
return new Result().setResult(resultCode);
}
// 失败返回数据
public static Result failure(ResultCode resultCode, Object data) {
return new Result().setResult(resultCode, data);
}
}
package xxx.xx.controller;
// result相关
import xxx.xxx.utils.algoUtils.ResponseResult;
import xxx.xxx.utils.algoUtils.Result;
import xxx.xxx.bean.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //默认全部返回json
@RequestMapping("/user")
public class UserController {
@GetMapping("/list")
public Result getUserInfo(){
User u=new User();
u.setUserId("21");
u.setUsername("kenx");
u.setPassword("224r2");
return ResultResponse.success(u);
}
}
@GetMapping("/list")
public User getUserInfo() {
User u = new User();
u.setUserId("21");
u.setUsername("kenx");
u.setPassword("224r2");
return u;
}
package xxx.xxx.utils.algoUtils;
import java.lang.annotation.*;
/**
* 统一包装接口返回的值 Result
*/
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseResult {
}
package xxx.xxx.utils.algoUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
/**
* @author yiner
* @since 2021-10-20
*/
@Component
public class ResponseResultInterceptor implements HandlerInterceptor {
//标记名称
public static final String RESPONSE_RESULT_ANN = "RESPONSE-RESULT-ANN";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 请求方法
if (handler instanceof HandlerMethod) {
final HandlerMethod handlerMethod = (HandlerMethod) handler;
final Class<?> clazz = handlerMethod.getBeanType();
final Method method = handlerMethod.getMethod();
// 判断是否在类上加了注解
if (clazz.isAnnotationPresent(ResponseResult.class)) {
// 设置此请求返回体需要包装,往下传递,在ResponseBodyAdvice接口进行判断
request.setAttribute(RESPONSE_RESULT_ANN, clazz.getAnnotation(ResponseResult.class));
// 方法体上是否有注解
} else if (method.isAnnotationPresent(ResponseResult.class)) {
// 设置此请求返回体需要包装,往下传递,在ResponseBodyAdvice接口进行判断
request.setAttribute(RESPONSE_RESULT_ANN, clazz.getAnnotation(ResponseResult.class));
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}