首页 > 解决方案 > 如何验证非必需的 RequestParam 不为空?

问题描述

我在我的弹簧控制器中使用验证器。如果@RequestParam需要没有问题,我可以用@NotBlank. 但是如果@RequestParam是可选的,我不能用它@NotBlank,因为这个参数是可选的,有时可以为空。我想验证@NotBlankString 是否不为空。有什么限制可以帮助我吗?

@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`

如果我这样使用,我得到“输入验证失败!”。

标签: javaspringvalidationspring-restcontroller

解决方案


您需要为此添加自定义验证器。

界面

@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 s, ConstraintValidatorContext context) {
        if (s == null) {
            return true;
        }
        
        return !s.isBlank();
    }

}

推荐阅读