Нет содержимого в Spring Boot Rest
Как настроить Spring Boot для возврата 204 в методах GET (обычно это методы findAll), когда метод не извлекает записи? Я не хотел бы проводить лечение в каждом методе, введите код ниже:
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();
}
Если результат findAll() пуст или равен нулю, то мой контроллер должен вернуть 204 вместо 200.
1 ответ
Вы можете зарегистрировать кастом ResponseBodyAdvice
что позволяет настроить ответ @ResponseBody
или же 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;
}
}