Не может применить пользовательскую проверку к requestParam

У меня есть 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));
        }
    }

Разместите здесь свой класс CurrencyValidation и какой ожидаемый результат?

rimonmostafiz 29.07.2019 15:48

@rimonmostafiz Я ожидаю, что если я введу не валюту, я получу ошибку 400

qwerty 29.07.2019 15:57

Какую ошибку вы получаете?

rimonmostafiz 29.07.2019 16:01

@rimonmostafiz неприменим к параметру

qwerty 29.07.2019 16:03

Есть ли в журнале ConstraintViolationException?

rimonmostafiz 29.07.2019 16:07

@rimonmostafiz нет

qwerty 29.07.2019 16:09

Давайте продолжить обсуждение в чате.

rimonmostafiz 29.07.2019 16:12

@qwerty вам нужен @valid, чтобы проверки обычно работали с параметрами пути. Дайте мне знать, если это решило вашу проблему

Coder 29.07.2019 17:28

Ваш метод обычно должен выглядеть как public Object converting(@Valid @RequestParam("fromCurrency") @NotNull @CurrencyValidation String fromCurrency...

Coder 29.07.2019 17:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
9
506
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Включите проверку параметров в конфигурации:

 @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 })

Включите все это в свой вопрос, чтобы это могло помочь кому-то в будущем.

Coder 31.07.2019 16:14

Другие вопросы по теме