每个空响应返回404

Tug*_*rul 5 http httpresponse spring-boot

我想在Spring引导中自动为每个响应返回响应对象时返回404.

我需要建议.

我不想在控制器中检查它是否为null.

man*_*ish 6

您需要多个 Spring 模块来实现这一点。基本步骤是:

  1. 声明一个异常类,可用于在存储库方法未返回预期值时抛出异常。
  2. 添加@ControllerAdvice捕获自定义异常并将其转换为 HTTP404状态代码的 。
  3. 添加一个 AOP 建议,用于拦截存储库方法的返回值,并在发现值不符合预期时引发自定义异常。

第 1 步:异常类

public class ResourceNotFoundException extends RuntimeException {}
Run Code Online (Sandbox Code Playgroud)

第 2 步:控制器建议

@ControllerAdvice
public class ResourceNotFoundExceptionHandler
{
  @ExceptionHandler(ResourceNotFoundException.class)
  @ResponseStatus(HttpStatus.NOT_FOUND)
  public void handleResourceNotFound() {}
}
Run Code Online (Sandbox Code Playgroud)

第 3 步:AspectJ 建议

@Aspect
@Component
public class InvalidRepositoryReturnValueAspect
{
  @AfterReturning(pointcut = "execution(* org.example.data.*Repository+.findOne(..))", returning = "result")
  public void intercept(final Object result)
  {
    if (result == null)
    {
      throw new ResourceNotFoundException();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Github上提供一个示例应用程序来演示所有这些操作。使用像 Postman for Google Chrome 这样的 REST 客户端来添加一些记录。然后,尝试通过其标识符获取现有记录将正确返回记录,但尝试通过不存在的标识符获取记录将返回404