Spring Boot Rest中没有内容

当方法不提取记录时,如何将Spring Boot配置为在GET方法(通常是findAll方法)中返回204? 我不想在每种方法中进行处理,输入以下代码:

if(!result) return new ResponseEntity(HttpStatus.NO_CONTENT); return new ResponseEntity(HttpStatus.OK) 

我想转换这个方法:

 @GetMapping public ResponseEntity findAll(){ List result = service.findAll(); return !result.isEmpty() ? new ResponseEntity(result, HttpStatus.OK) : new ResponseEntity(HttpStatus.NO_CONTENT); } 

在这一个:

 @GetMapping public List findAll(){ return service.findAll(); } 

如果findAll()的结果为空或为null,则我的控制器应返回204而不是200

您可以注册一个自定义的ResponseBodyAdvice ,它允许自定义@ResponseBodyResponseEntity处理程序方法的ResponseEntity (在MessageConverter序列化内容之前):

 @ControllerAdvice class NoContentControllerAdvice implements ResponseBodyAdvice> { @Override public boolean supports(MethodParameter returnType, Class> converterType) { return List.class.isAssignableFrom(returnType.getParameterType()); } @Override public List beforeBodyWrite(List body, MethodParameter returnType, MediaType selectedContentType, Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body.isEmpty()) { response.setStatusCode(HttpStatus.NO_CONTENT); } return body; } } 
Interesting Posts