У меня есть следующий класс обслуживания:
@Service
public class CitiesServiceImpl implements CitiesService {
@Autowired
private CitiesRepository citiesRepository;
@Override
public City getCityById(Integer cityId) {
return citiesRepository.findById(cityId)
.orElseThrow(ResourceNotFoundException::new);
}
}
, и он используется в моем контроллере:
@RestController
@RequestMapping("/cities")
public class CitiesController {
@Autowired
private CitiesService citiesService;
@GetMapping("/{cityId}")
public City readCity(@PathVariable Integer cityId) {
return citiesService.getCityById(cityId);
}
@ExceptionHandler(ResourceNotFoundException.class)
String handleResourceNotFound(Exception e) {
return e.getMessage();
}
}
Поэтому, когда readCity
вызывается с несуществующим cityID
ResourceNotFoundException
будет выброшен, а затем обработан обработчиком исключений handleResourceNotFound
.
Однако, при обработке ResouceNotFoundException
, код состояния в ответе по-прежнему 202, т. Е. ОК.Похоже, что аннотация @ResponseStatus
в ResourceNotFoundException
не используется во время выполнения.Это можно исправить, добавив @ResponseStatus (value = HttpStatus.NOT_FOUND) к методу handleResourceNotFound
, но такой код дублируется, поскольку аннотация @ResponseStatus
уже находится в ResourceNotFoundException
.
Вопрос: Как использовать аннотацию ResponseStatus
для ResourceNotFoundException
вместо добавления дублирующего кода?