1 url的命名
在实际开发中名词居多,见名知意
- get 获取数据
- post 添加数据
- put 修改数据
- delete 逻辑假删除
2 返回数据的格式
2.1 一般返回的是json数据 {状态码: 信息}
**一些常用的返回状态码 **
https://help.aliyun.com/knowledge_detail/36393.html?spm=5176.10695662.1996646101.searchclickresult.33f71bb4EstSUR&aly_as=Gf1sQix
2.2 直接在Controller中调用静态方法
2.2.1 先创建一个返回集的接口
public interface Result<T> {
}
2.2.2 定义返回信息枚举类型
public enum StatusTypeEnum {
/**
* 200为成功
* 404为错误信息
*/
SUCCESS(200,"success"),
ERROR(404,"error");
private String msg;
private int status;
StatusTypeEnum(int status, String msg) {
this.status = status;
this.msg = msg;
}
}
2.2.3 创建successResult返回集继承返回集接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SuccessResult<T> implements Result<T> {
private StatusTypeEnum status;
private T data;
public static SuccessResult succes() {
return new SuccessResult<>(StatusTypeEnum.SUCCESS, null);
}
public static <T> SuccessResult succes(T data) {
return new SuccessResult<>(StatusTypeEnum.SUCCESS, data);
}
}
2.2.4 创建errorResult返回集继承返回集接口
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ErrorResult implements Result {
private StatusTypeEnum status;
private String msg;
public static ErrorResult error(int status, Exception ex) {
return new ErrorResult(StatusTypeEnum.ERROR, ex.getMessage());
}
public static ErrorResult error() {
return new ErrorResult(StatusTypeEnum.ERROR, "错误");
}
}
定义的内容需要根据业务不同来定,这个只是大体架构
2.3 利用AOP切面变成
@RestControllerAdvice + 实现ResponseBodyAdvice
将Result 封装到aop 中, Controller层 直接返回 参数,让aop去判断,返回的Result
@RestControllerAdvice
@Slf4j
public class GlobalResultAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
log.error("supports");
//为false 将不执行下面的aop方法
return true;
}
/**
*
* @param body
* @param returnType
* @param selectedContentType
* @param selectedConverterType
* @param request
* @param response
* @return
*/
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
Object resp = null;
if (body instanceof SuccessResult){
resp = body;
}else{
resp = SuccessResult.succes(body);
}
return resp;
}
}