java - 如何使用 OR 条件验证 2 个字段?

标签 java spring bean-validation jsr

我想验证请求类的两个字段,其中一个字段有效或另一个字段有效。

例如: 请求 Bean

public class CarRequest  {
    @NotEmpty
    private String customerName;
    @NotEmpty
    private String customerId;

Controller 方法

    public @ResponseBody CarResponse addCar(
            @ModelAttribute @Valid CarRequest request, BindingResult results)
            throws RuntimeException, ValidationException {
        if (results.hasErrors()) {
            LOG.error("error occured while adding the car");
            throw new ValidationException(
                    "Error Occoured while validiating car request");
        }
}

在这里,我想检查 customerName 是否应为 NotEmpty 或 customerId 是否应为 NotEmpty。那么我的验证应该通过。我怎样才能实现它。请推荐!!

最佳答案

您需要创建自定义 validator 来验证多个字段。

创建自定义注释:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Documented
@Constraint(validatedBy = CarRequestValidator.class)
@Target({ ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestAnnotation {
    String message() default "{RequestAnnotation}";

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

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

创建自定义 validator :

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CarRequestValidator implements 
                ConstraintValidator<RequestAnnotation, CarRequest> {

    @Override
    public void initialize(RequestAnnotation constraintAnnotation) {

    }

    @Override
    public boolean isValid(CarRequest value, ConstraintValidatorContext context) {
        // validation logic goes here
        return false;
    }
}

现在,使用自定义注释来注释您的模型:

@RequestAnnotation 
public class CarRequest  {
    private String customerName;
    private String customerId;
}

关于java - 如何使用 OR 条件验证 2 个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29250052/

相关文章:

java - JButton 的 addMouseListener 或 actionListener?

java - 如何动态更改 application.properties 中的参数,以便可以使用新值来触发计划作业

java - RESTful Web 服务发布请求验证必填字段

java - 如何使用子编辑器实现 GWT 编辑器

java - 方法签名内的@Validation

java - JSch Esc 命令和编码

java - 在 Android 中为我的应用抛出 IllegalStateException

java - 如果当前类是spring bean,如何使用抽象类中的参数调用 super 构造函数?

java - 将@RequestParam 用于多部分文件是正确的方法吗?

java - 不使用 @valid 的 Spring bean 验证