如何验证非必需的RequestParam是否为空?

时间:2019-01-31 11:45:35

标签: java spring validation spring-restcontroller

我在弹簧控制器中使用验证器。如果需要@RequestParam没问题,我可以使用@NotBlank检查String。但是,如果@RequestParam是可选的,则我不能将其与@NotBlank一起使用,因为此参数是可选的,有时可以为null。 如果String不为null,我想验证@NotBlank。有什么约束可以帮助我吗?

@RequestParam @NotBlank String name

完美运行。我对required=false有疑问 如果客户端不发送可选的description参数,则验证失败。

@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 :(得分:0)

这不是验证@RequestParam的正确方法。您必须在代码中进行验证  如果为空,则throw new IllegalArgumentException("{\"error\":\"The parameter is invalid\"}"

答案 1 :(得分:0)

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

示例实施

界面

@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

    }

}

希望这会有所帮助

答案 2 :(得分:0)

同时使用@RequestParam(required = false)@NotBlank毫无意义。 @NotBlank批注的工作原理如下。

  

以@NotBlank约束的String字段不能为null,并且修剪后的长度必须大于零。

可能的解决方法是,只要您有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
    }
}

请记住,上面的代码尚未经过测试