我计划使用javax验证
API中的ConstraintValidation
波姆。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>
位置检查。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 {};
}
位置验证器。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;
}
}
位置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;
}
机器人。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() {
}
}
一个pp.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
,然后将调用验证程序。
我有一个像下面这样的模型对象,带有自定义约束验证器。自定义验证器检查是否填充了fileName或小时。 有一种方法将此作为输入,它验证所有以下条件 > 条件不为空(通过默认验证器) criteria.id不为空(通过默认验证器) criteria.name不为空(通过默认验证器) 标准文件名或小时不为空(通过自定义验证器) 空评估(@NotNull@有效标准标准){} 现在,当我为这个模型类编写单
我有以下验证器,用于验证更新请求。 object.getIdCreditor()有一个值,但是findById方法的执行["CreditorRepository.findById(object.getIdCreditor())" ] 进入NullPointer异常 我不明白怎么了。
在本教程中,你将学习如何在 Sequelize 中设置模型的验证和约束. 对于本教程,将假定以下设置: const { Sequelize, Op, Model, DataTypes } = require("sequelize"); const sequelize = new Sequelize("sqlite::memory:"); const User = sequelize.define
为了在将表单提交到服务器之前验证数据,HTML5 新增了一些功能。有了这些功能,即便JavaScript被禁用或者由于种种原因未能加载,也可以确保基本的验证。换句话说,浏览器自己会根据标记中的规则执行验证,然后自己显示适当的错误消息(完全不用JavaScript 插手)。当然,这个功能只有在支持HTML5 这部分内容的浏览器中才有效,这些浏览器有Firefox 4+、Safari 5+、Chrom
我想通过使用Spring Boot和Hibernate Validator进行字段验证,而不保存数据。
每个人 因此,我有一个SpringBoot应用程序,它带有一个控制器,该控制器有几种方法,将以下POJO作为参数: 对于其中一个控制器endpoint,我想应用额外的验证逻辑,因此在我添加了以下内容: 是我想要应用的约束注释。 我的问题是,只有在中定义的检查成功通过时,才会调用此附加约束。如果为空,约束将被忽略,客户端将收到不完整的验证结果。我错过了什么?