У меня есть следующий контроллер:
@RestController
@RequestMapping("/api/{brand}"
public class CarController {
@GetMapping
public List<Car> getCars(@PathVariable("brand") String brand) {
// Some implementation
}
@GetMapping("/{model}")
public Car getCar(@PathVariable("model") String model) {
// Some implementation
}
@PostMapping("/{model}")
public Car addCar(@PathVariable("model") String model), @RequestBody Car car) {
// Some implementation
}
}
И следующие RestControllerAdvice
:
@RestControllerAdvice(assignableTypes = {CarController.class})
public class InterceptModelPathParameterControllerAdvice {
@Autowired
CarService carService;
@ModelAttribute
public void validateModel(@PathVariable("model") String model) {
if (!carService.isSupportedModel(model)) throw new RuntimeException("This model is not supprted by this application.");
}
}
validateModel
правильно проверяет методы getCar
и addCar
, но он также проверяет метод getCars
. Метод getCars
не имеет {model}
@PathVariable
, поэтому запрос к этой конечной точке всегда приведет к RuntimeException
.
Есть ли способ исключить влияние метода на комбинацию ControllerAdvice
и ModelAttribute
?