#java #spring #spring-mvc #spring-data-rest
#java #весна #spring-mvc #spring-data-rest
Вопрос:
У меня есть следующий класс обслуживания:
@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, то есть OK. Кажется, что @ResponseStatus
аннотация в ResourceNotFoundException
не используется во время выполнения. Это можно исправить, добавив @ResponseStatus(значение=HttpStatus.NOT_FOUND) в метод handleResourceNotFound
, но такой код дублируется, поскольку @ResponseStatus
аннотация уже есть в ResourceNotFoundException
.
Вопрос: Как использовать ResponseStatus
аннотацию ResourceNotFoundException
вместо добавления повторяющегося кода?
Комментарии:
1. Просто удалите этот бесполезный
handleResourceNotFound
метод или верните требуемый код самостоятельно.
Ответ №1:
Удалите это handleResourceNotFound
, и пусть framework обработает это за вас, или верните правильный Response
handleResourceNotFound
метод from .
Объявляя такой обработчик, вы говорите, что будете обрабатывать такой случай, поэтому фреймворк отступает.
Комментарии:
1. Большое спасибо! кажется, что
ResourceNotFoundException
это обрабатывается самой Spring framework? и как?2. Он просто улавливает это, анализирует упомянутые вами аннотации и генерирует правильный ответ.