如何解决Spring @ExceptionHandler 不会覆盖默认响应
我试图覆盖 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 的那篇文章,您将了解您使用的这 2 种异常处理方式不应一起使用。还指出,使用 @ResponseStatus
不能覆盖错误消息。
问题是我正在将一个休眠实体传递给 ResponseEntity。然后它发生了经典错误“无法延迟初始化”,但控制台上没有显示任何相关内容。我不得不调试才能找到。
错误发生在 ServletInvocableHandlerMethod 的第 113 行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。