java - 如何验证非必需的 RequestParam 不为空?
问题描述
我在我的弹簧控制器中使用验证器。如果@RequestParam
需要没有问题,我可以用@NotBlank
. 但是如果@RequestParam
是可选的,我不能用它@NotBlank
,因为这个参数是可选的,有时可以为空。我想验证@NotBlank
String 是否不为空。有什么限制可以帮助我吗?
@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`
如果我这样使用,我得到“输入验证失败!”。
解决方案
您需要为此添加自定义验证器。
界面
@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();
}
}
推荐阅读
- android - OxygenOS 9 请求读取服务消息权限
- c# - 在 Asp.Net Core 上为 MongoDB ObjectId 创建 ModelBinder
- reactjs - React — 为 dangerouslySetInnerHTML 子元素添加点击监听器
- sql-server - 连接到适用于 Linux 的 SQL Server 2017 时出现问题
- amazon-web-services - 如何访问公有子网的RDS实例,可从其他VPC私有子网中的ec2实例公开访问?
- database - 为什么 Oracle 在 impdp 期间抛出致命错误?
- perl - Perl:Foreach 循环中的最终输出行打印两次
- cmake - 使用 CMake 工具链文件交叉编译 Azure IoTHub SDK 时无法链接 libuuid
- c# - 如何选择到期日期与当前日期匹配的项目并找到它们之间的差异
- javascript - javascript在线课程,任务问题