Spring @ExceptionHandler 没有覆盖默认响应
Spring @ExceptionHandler is not overriding the default response
我正在尝试覆盖 Spring Rest 异常的默认响应,插入实体列表:
@RestController:
@ExceptionHandler(EntityConflictException.class)
public ResponseEntity<List<Entity>> exceptionHandler(EntityConflictException exception) {
return new ResponseEntity<>(exception.getList(), HttpStatus.CONFLICT);
}
异常:
@ResponseStatus(value = HttpStatus.CONFLICT)
public class EntityConflictException extends RuntimeException {
List<Entity> entities;
public EntityConflictException(List<Entity> entities) {
super("message");
this.entities = entities;
}
public EntityConflictException(String message) {
super(message);
}
public EntityConflictException(String message, Throwable cause) {
super(message, cause);
}
public List<Entity> getList() {
return entities;
}
}
@Service 抛出异常:
throw new EntityConflictException(entitiesList);
响应总是:
{
"timestamp": "2021-03-27 20:15:36",
"status": 409,
"error": "Conflict",
"exception": "EntityConflictException",
"message": "Conflict",
"path": "/endpoint"
}
我认为您必须从 EntityConflictException 中删除 @ResponseStatus(value = HttpStatus.CONFLICT)
。它被注册为该异常的默认处理程序,并且不使用您的自定义异常处理方法。
在这里 spring boot exception handling 看看那篇文章,您会明白您使用的这两种异常处理方式并不意味着一起使用。还指出使用 @ResponseStatus
不能覆盖错误消息。
问题是我将休眠实体传递给 ResponseEntity。然后它发生了经典错误“延迟初始化失败”,但控制台上没有显示任何内容。我必须调试才能找到答案。
错误发生在第113行的ServletInvocableHandlerMethod
我正在尝试覆盖 Spring Rest 异常的默认响应,插入实体列表:
@RestController:
@ExceptionHandler(EntityConflictException.class)
public ResponseEntity<List<Entity>> exceptionHandler(EntityConflictException exception) {
return new ResponseEntity<>(exception.getList(), HttpStatus.CONFLICT);
}
异常:
@ResponseStatus(value = HttpStatus.CONFLICT)
public class EntityConflictException extends RuntimeException {
List<Entity> entities;
public EntityConflictException(List<Entity> entities) {
super("message");
this.entities = entities;
}
public EntityConflictException(String message) {
super(message);
}
public EntityConflictException(String message, Throwable cause) {
super(message, cause);
}
public List<Entity> getList() {
return entities;
}
}
@Service 抛出异常:
throw new EntityConflictException(entitiesList);
响应总是:
{
"timestamp": "2021-03-27 20:15:36",
"status": 409,
"error": "Conflict",
"exception": "EntityConflictException",
"message": "Conflict",
"path": "/endpoint"
}
我认为您必须从 EntityConflictException 中删除 @ResponseStatus(value = HttpStatus.CONFLICT)
。它被注册为该异常的默认处理程序,并且不使用您的自定义异常处理方法。
在这里 spring boot exception handling 看看那篇文章,您会明白您使用的这两种异常处理方式并不意味着一起使用。还指出使用 @ResponseStatus
不能覆盖错误消息。
问题是我将休眠实体传递给 ResponseEntity。然后它发生了经典错误“延迟初始化失败”,但控制台上没有显示任何内容。我必须调试才能找到答案。
错误发生在第113行的ServletInvocableHandlerMethod