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