Как проверить необязательный RequestParam не пустым? - PullRequest
0 голосов
/ 31 января 2019

Я использую валидаторы в моих контроллерах пружин.Если требуется @RequestParam, проблем нет, я могу проверить строку с @NotBlank.Но если @RequestParam является необязательным, я не могу использовать его с @NotBlank, потому что этот параметр является необязательным и иногда может быть нулевым.Я хочу проверить @NotBlank, если строка не равна нулю.Есть какие-то ограничения, помогите мне?

@RequestParam @NotBlank String name

работает отлично.У меня проблема с required=false, если клиент не отправляет необязательный параметр описания, проверка завершается неудачей.

@PatchMapping("/role/{id}") 
public ResponseEntity<?> updateRole(HttpServletRequest request, @PathVariable @Positive Integer id,
                                   @RequestParam @NotBlank String name,
                                   @RequestParam(required = false) @NotBlank String description)

Я хочу проверить @NotBlank, если описание не null.

`@RequestParam(required = false) @NotBlank String description`

Если я использую это, я получаю «Проверка ввода не удалась!».

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Возможно, вам понадобится добавить собственный валидатор для этого

Пример реализации

Интерфейс

@Documented
@Constraint(validatedBy = YourValidator.class)
@Target({ ElementType.METHOD,ElementType.ANNOTATION_TYPE,ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface NotBlankIfPresent{

    String message() default "Error MEssage";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

Ваш класс валидатора

public class YourValidator implements ConstraintValidator<NotBlankIfPresent, String> {

    @Override
    public boolean isValid(String object, ConstraintValidatorContext context) {
            //Your Logic

    }

}

надеюсь, это поможет

0 голосов
/ 31 января 2019

Нет смысла использовать @RequestParam(required = false) и @NotBlank вместе.Вот как работает аннотация @NotBlank.

a Поле String, ограниченное @NotBlank, должно быть не нулевым, а урезанная длина должна быть больше нуля.

Может бытьВ качестве обходного пути можно использовать значение по умолчанию в переменной параметра запроса, если у вас есть required = false

Пример:

@PatchMapping("/role/{id}") 
public ResponseEntity<?> updateRole(HttpServletRequest request, @PathVariable 
@Positive Integer id, @RequestParam @NotBlank String name,
@RequestParam(required = false, defaultValue = "adefaultvalue") @NotBlank String description) {
    if(description.equals("adefaultvalue") {
      // that means that the user did not send any value for this variable so you can 
     // add your validation logic here
    }
}

Обратите внимание, что приведенный выше кодне был проверен

0 голосов
/ 31 января 2019

Это неправильный подход для проверки @RequestParam.Вы должны подтвердить в своем коде, если он пуст, то throw new IllegalArgumentException("{\"error\":\"The parameter is invalid\"}"

...