java - Spring-boot - 两个相关字段的自定义验证

标签 java spring-boot spring-data-jpa

@Column(length = 100)
private String post;

@NotNull
@Column
private String name;

我怎样才能实现验证

  • 如果帖子为空或为 null,则不得接受姓名

知道如何开始吗?

最佳答案

您必须创建类级别约束。

  1. 创建注释
  2. 创建约束 validator

以下是文档中的示例:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-class-level-constraints

包org.hibernate.validator.referenceguide.chapter06.classlevel;

注释:

@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = { ValidPassengerCountValidator.class })
@Documented
public @interface ValidPassengerCount {

    String message() default "{org.hibernate.validator.referenceguide.chapter06.classlevel." +
            "ValidPassengerCount.message}";

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

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

validator

package org.hibernate.validator.referenceguide.chapter06.classlevel;

public class ValidPassengerCountValidator
        implements ConstraintValidator<ValidPassengerCount, Car> {

    @Override
    public void initialize(ValidPassengerCount constraintAnnotation) {
    }

    @Override
    public boolean isValid(Car car, ConstraintValidatorContext context) {
        if ( car == null ) {
            return true;
        }

        return car.getPassengers().size() <= car.getSeatCount();
    }
}

然后您可以在类级别使用注释:

包org.hibernate.validator.referenceguide.chapter02.classlevel;

@ValidPassengerCount
public class Car {

    private int seatCount;

    private List<Person> passengers;

    //...
}

关于java - Spring-boot - 两个相关字段的自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59262726/

相关文章:

java - 为什么使用java套接字创建的服务器不打印从客户端发送的数据(如果客户端终止则显示)?

java - 如何打印字符的最大值?

带有 Spring Security 的 Spring Boot 2 执行器

java - 如何在一个参数Spring data jpa中找到多个项目

java - 使用 Spring Data JPA native 查询在两个日期之间搜索记录?

java - JOOQ Oracle 数字精度和 Java 数字映射

java - 如何正确使用双坐标作为 HashMap 中的键?

spring - 从环境变量设置注释属性?

node.js - Kibana - 无法在 Windows 10 上启动 kibana

java - H2 控制台在 H2 数据库中抛出错误 webAllowOthers