У меня есть RequestParam, и мне нужно его проверить, но пользовательская проверка mu не применяется, мой контроллер
@RestController
@Validated
class ExchangeController {
private static final Logger logger = Logger.getLogger(ExchangeController.class.getName());
@SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
@Autowired
@Qualifier("dataService")
private CurrencyExchangeService currencyExchangeService;
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json")
public Object converting(@RequestParam("fromCurrency") @NotNull @CurrencyValidation String fromCurrency,
@RequestParam("toCurrency") @NotNull String toCurrency,
@RequestParam("amount") @NotNull String amount) throws IOException {
BigDecimal convertedAmount = currencyExchangeService.convert(fromCurrency, toCurrency, new BigDecimal(amount));
return new ExchangeRateDTO(fromCurrency, toCurrency, new BigDecimal(amount), convertedAmount);
}
}
и пользовательская проверка
public class ConstractCurrencyValidator implements
ConstraintValidator<CurrencyValidation, String> {
@Override
public void initialize(CurrencyValidation currency) {
}
@Override
public boolean isValid(String currency, ConstraintValidatorContext constraintValidatorContext) {
return currency != null && Currency.getAvailableCurrencies().contains(Currency.getInstance(currency));
}
}
@rimonmostafiz Я ожидаю, что если я введу не валюту, я получу ошибку 400
Какую ошибку вы получаете?
@rimonmostafiz неприменим к параметру
Есть ли в журнале ConstraintViolationException?
@rimonmostafiz нет
Давайте продолжить обсуждение в чате.
@qwerty вам нужен @valid, чтобы проверки обычно работали с параметрами пути. Дайте мне знать, если это решило вашу проблему
Ваш метод обычно должен выглядеть как public Object converting(@Valid @RequestParam("fromCurrency") @NotNull @CurrencyValidation String fromCurrency...




Включите проверку параметров в конфигурации:
@Bean
public Validator validator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor;
}
нужно поставить аннотацию в моем @interface CustomValidation. Это означает, что для параметра также можно использовать проверку.
@Target({ ElementType.PARAMETER })
Включите все это в свой вопрос, чтобы это могло помочь кому-то в будущем.
Разместите здесь свой класс
CurrencyValidationи какой ожидаемый результат?