当方法未获取记录时,如何配置 Spring Boot 在 GET 方法(通常是 findAll 方法)中返回 204?我不想在每个方法中都做处理,输入下面的代码:
if(!result)
return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
return new ResponseEntity<Void>(HttpStatus.OK)
我想改变这个方法:
@GetMapping
public ResponseEntity<?> findAll(){
List<User> result = service.findAll();
return !result.isEmpty() ?
new ResponseEntity<>(result, HttpStatus.OK) : new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
}
在这一篇中:
@GetMapping
public List<User> findAll(){
return service.findAll();
}
如果结果来自找到所有()为空或 null 那么我的控制器应该返回204代替200.
您可以注册一个自定义ResponseBodyAdvice它允许自定义响应@ResponseBody
or ResponseEntity
处理程序方法(在内容被序列化之前)MessageConverter
):
@ControllerAdvice
class NoContentControllerAdvice implements ResponseBodyAdvice<List<?>> {
@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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)