编码实现基于注解纯干货实现,废话不多。可按需修改对所有方法进行封装。
对你有帮助的话,点个赞噢
返回值对象
package com.esp.common.vo; import com.esp.common.enums.ResponseEnum; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; import java.io.Serializable; import java.time.LocalDateTime; @Getter @ToString @AllArgsConstructor public class ResponseVoimplements Serializable { private static final long serialVersionUID = 728686158789041007L; private Integer code; private String message; private LocalDateTime timestamp; private T data; private ResponseVo(){} public ResponseVo(ResponseEnum responseEnum) { this.code = responseEnum.getCode(); this.message = responseEnum.getMessage(); this.timestamp = LocalDateTime.now(); } public ResponseVo(Integer code, String message) { this.code = code; this.message = message; this.timestamp = LocalDateTime.now(); } public ResponseVo(Integer code, String message, T data) { this.code = code; this.message = message; this.data = data; this.timestamp = LocalDateTime.now(); } public ResponseVo(ResponseEnum responseEnum, T data) { this.code = responseEnum.getCode(); this.message = responseEnum.getMessage(); this.data = data; this.timestamp = LocalDateTime.now(); } }
封装返回值对象工具类
package com.esp.common.util.response;
import com.esp.common.enums.ResponseEnum;
import com.esp.common.vo.ResponseVo;
public class ResponseUtils {
public static ResponseVo success() {
return new ResponseVo(ResponseEnum.SUCCESS);
}
public static ResponseVo getResponseVo(ResponseEnum responseEnum) {
return new ResponseVo(responseEnum);
}
public static ResponseVo getResponseVo(Integer code, String message) {
return new ResponseVo(code, message);
}
public static ResponseVo getResponseVo(Integer code, String message, T data) {
return new ResponseVo(code, message, data);
}
public static ResponseVo getResponseVo(ResponseEnum responseEnum, T data) {
return new ResponseVo(responseEnum, data);
}
}
定义返回值状态码
package com.esp.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ResponseEnum {
SUCCESS(0, "成功"),
UNKONW_ERROR(-1, "未知错误"),
REQUEST_TOO_MANY(-2, "请勿重复请求"),
PARAM_IS_BANK(1001, "参数存在空值"),
PARAM_IS_INVALID(1002, "参数无效"),
UCOMPANY_NOT_EXIST(2001, "企业不存在"),
UOPERATE_NOT_EXIST(3001, "用户不存在"),
;
private Integer code;
private String message;
}
自定义注解
package com.esp.common.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface ResponseData {}
自定义异常
package com.esp.common.exception;
import com.esp.common.enums.ResponseEnum;
import lombok.Getter;
@Getter
public class ErrorResultException extends RuntimeException{
private Integer code;
private String message;
public ErrorResultException(ResponseEnum responseEnum) {
super(responseEnum.getMessage());
this.code = responseEnum.getCode();
this.message = responseEnum.getMessage();
}
public ErrorResultException(Integer code, String message) {
super(message);
this.code = code;
this.message = message;
}
}
基于@RestController按需封装返回值
package com.esp.common.advice; import com.esp.common.annotation.ResponseData; import com.esp.common.enums.ResponseEnum; import com.esp.common.exception.ErrorResultException; import com.esp.common.util.response.ResponseUtils; import com.esp.common.vo.ResponseVo; import org.springframework.core.MethodParameter; import org.springframework.core.annotation.AnnotatedElementUtils; 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.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import java.lang.annotation.Annotation; @RestControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice
配置转换器
package com.esp.common.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List> converters) {
// 将 json 处理的转换器放到第一位,使得先让 json 转换器处理返回值
// converters.add(0, new MappingJackson2HttpMessageConverter());
// 把String类型的转换器去掉,不使用String类型的转换器
converters.removeIf(httpMessageConverter -> httpMessageConverter.getClass() == StringHttpMessageConverter.class);
}
}
测试
@RestController
public class TestController {
@ResponseData
@GetMapping("test")
public String test() {
return "test";
}
}



