gpt4 book ai didi

Java 约束验证 - 未触发验证

转载 作者:行者123 更新时间:2023-11-30 06:12:54 25 4
gpt4 key购买 nike

我计划使用 javax-validation API 中的 ConstraintValidation

pom.xml

<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>6.0.2.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.0.Final</version>
</dependency>

PositionCheck.java

@Constraint(validatedBy = PositionValidator.class)
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PositionCheck {
String message() default "Invalid position.";

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

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

PositionValidator.java

public class PositionValidator implements ConstraintValidator<PositionCheck, Position> {
public void initialize(PositionCheck positionCheck) {
System.out.println(positionCheck);
}

public boolean isValid(Position position, ConstraintValidatorContext constraintValidatorContext) {
return position.getX() > 0
&& position.getY() > 0
&& position.getX() < BOARD_X_SIZE
&& position.getY() < BOARD_Y_SIZE;
}
}

Position.java

// Generates all the getter methods
@Getter(AccessLevel.PUBLIC)

// Generate all the setter methods
@Setter(AccessLevel.PUBLIC)

// Generates an all argument constructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)

// Overrides the default toString() method
@ToString(callSuper = true, includeFieldNames = true)

// Overriding equals() and hashCode() methods, to check the equality
@EqualsAndHashCode
public class Position {

// position on the x-axis
private Integer x;

// position on the y-axis
private Integer y;

// direction indicates, what direction robot is facing
// possible values are NORTH, SOUTH, EAST or WEST
private Direction direction;
}

Robo.java

@Getter @Setter(AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)

public class Robo implements IRobo {


@PositionCheck
private Position currentPosition;

public void left() {

}

public void move() {

}

@SneakyThrows(InvalidPositionException.class)
public void place(Position position) {
if(position == null) {
throw new InvalidPositionException("To place robo on TableTop, position cannot be null");
}

this.setCurrentPosition(new Position(position.getX(), position.getY(), position.getDirection()));
}

public void report() {

}

public void right() {

}
}

App.java

public class App 
{
public static void main( String[] args ) {
Robo robo = new Robo();
Position position = new Position(0,6, Direction.NORTH);
robo.setCurrentPosition(position);
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Position>> constraintViolations = validator.validate(position);
for (ConstraintViolation<Position> constraint : constraintViolations) {
System.out.println(constraint.getPropertyPath() + " "
+ constraint.getMessage());
}
}
}

这里的问题是,未调用 PositionCheckValidator 上的 isValid() 方法。我在这里缺少什么?

最佳答案

您正在验证位置

注释@PositionCheck位于robo的字段currentPosition上。验证robo, validator 将被调用。

关于Java 约束验证 - 未触发验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com