目录
demo下载:https://pan.baidu.com/s/1dRk-2VCkqkmVzIE4pSa3hA
该部分放在common微服务下:
1、拦截器:
@ControllerAdvice // 自动拦截所有controller
public class CommonExceptionHandler {
// 返回类型的泛型是ExceptionResult
@ExceptionHandler(LyException.class)
public ResponseEntity<ExceptionResult> handleException(LyException e) {
return ResponseEntity.status(e.getExceptionEnum().getCode()).body(new ExceptionResult(e.getExceptionEnum()));
}
}
2、异常类属性 枚举:
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {
PRIVE_CANNOT_BE_NULL(HttpStatus.BAD_REQUEST.value(), "价格不能为空!"),
CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "商品分类没查到!"),
SPEC_GROUP_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "商品规格组没查到!"),
BRAND_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "品牌不存在!"),
BRAND_SAVE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), "新增品牌失败!"),
UPLOAD_FILE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), "文件上传失败!"),
INVALID_FILE_TYPE(HttpStatus.BAD_REQUEST.value(), "无效的文件类型!"),
;
private int code;
private String msg;
}
3、异常类:
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class LyException extends RuntimeException {
private ExceptionEnum exceptionEnum;
}
4、异常实体类:
@Data
public class ExceptionResult {
private Map<String, Object> data = Maps.newHashMap();
private int status;
private String message;
private Long timestamp;
private boolean success;
public ExceptionResult() {
}
public ExceptionResult(ExceptionEnum e) {
this.status = e.getCode();
this.message = e.getMsg();
this.timestamp = System.currentTimeMillis();
this.success = false;
}
public ExceptionResult setResult(String key, Object obj){
this.status = HttpStatus.OK.value();
this.message = HttpStatus.OK.getReasonPhrase();
this.timestamp = System.currentTimeMillis();
this.success = true;
data.put(key, obj);
return this;
}
}
5、调用:
@PostMapping
public ResponseEntity<Item> saveItem(Item item){
// 校验价格
if (item.getPrice() == null) {
throw new LyException(ExceptionEnum.PRIVE_CANNOT_BE_NULL);
}
Item item1 = itemService.saveItem(item);
return ResponseEntity.status(HttpStatus.CREATED).body(item);
}
6、ResponseEntity与@ResponseBody
@ResponseBody将JAVA对象序列化后放到响应体中
ResponseEntity:返回实体,包含状态码、body、