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
,它允许自定义@ResponseBody
或ResponseEntity
处理程序方法的ResponseEntity
(在MessageConverter
序列化内容之前):
@ControllerAdvice class NoContentControllerAdvice implements ResponseBodyAdvice> { @Override public boolean supports(MethodParameter returnType, Class extends HttpMessageConverter>> converterType) { return List.class.isAssignableFrom(returnType.getParameterType()); } @Override public List> beforeBodyWrite(List> body, MethodParameter returnType, MediaType selectedContentType, Class extends HttpMessageConverter>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body.isEmpty()) { response.setStatusCode(HttpStatus.NO_CONTENT); } return body; } }