gpt4 book ai didi

java - 泽西应用引擎 : entity validation not working

转载 作者:行者123 更新时间:2023-12-03 22:58:46 25 4
gpt4 key购买 nike

我正在使用 Google App Engine、Jersey、Objectify 和 Gson(以及其他一些小型库)构建应用程序。

我想使用 @Valid 在资源中进行验证注解。但是,似乎没有执行任何实际验证。特别是,将 payee 设置为 "123"Entry 发送到 /entries 时/entries/nocheck,应用程序不会引发任何异常,并且实体正在保存在数据存储区中。

这是实体的片段:

@Entity
public class Entry {

@Id
private Long id;
private LocalDate date;
@com.sappenin.objectify.annotation.Money
private Money amount;
@NotNull @Pattern(regexp = "[a-zA-Z][a-zA-Z0-9]*") @Length(min = 5)
private String payee;
private String description;
private String note;

//...
}

这是资源的一个片段:

@Path("/entries")
@Produces(MediaType.APPLICATION_JSON)
public class TestApi {

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response create(@Valid Entry entry) {
OfyService.ofy().save().entities(entry).now();
return Response.ok(entry).build();
}

@POST
@Path("/nocheck")
@Consumes(MediaType.APPLICATION_JSON)
public Response createNoCheck(Entry entry) {
OfyService.ofy().save().entities(entry).now();
return Response.ok(entry).build();
}

}

这是应用程序:

public class MyApplication extends ResourceConfig {

public MyApplication() {
packages(
"it.newfammulfin.model",
"it.newfammulfin.api",
"it.newfammulfin.api.util");
}

}

请注意,pom.xml 包含此依赖项:

<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-bean-validation</artifactId>
<version>2.22.1</version>
</dependency>

这应该导致,due to the auto-discovery feature , 无需进一步配置即可启用验证。

我错过了什么?

更新

我在资源中添加了一个显式验证实体的方法:

  @POST
@Path("validate")
@Consumes(MediaType.APPLICATION_JSON)
public Response testValidate(@Valid Entry entry) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
System.out.println("validator is "+validator.getClass().getName());
System.out.println(validator.validate(entry));
return Response.ok(entry).build();
}

通过调用 validate() 进行验证。然而,实际调用 testValidate() 之前的验证不会。顺便说一句,我不得不使用 Apache BVal JSR303 Bean 验证的实现,因为一些 issues在 Hibernate Validator 和 Google App Engine 之间。

最佳答案

在 jersey 2.X 中你必须注册你的扩展。然而,验证似乎是个异常(exception),如所述here .无论如何我都会尝试一下,看看您可以配置什么:

  • CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE
  • ServerProperties.FEATURE_AUTO_DISCOVERY_DISABLE
  • ServerProperties.BV_FEATURE_DISABLE

您的应用程序类可能如下所示:

public class MyApplication extends ResourceConfig {
public MyApplication() {
register(ValidationFeature.class);
property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true)
packages(
"it.newfammulfin.model",
"it.newfammulfin.api",
"it.newfammulfin.api.util");
}
}

关于java - 泽西应用引擎 : entity validation not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153519/

25 4 0
文章推荐: asp.net-mvc - ASP.NET MVC 记住我
文章推荐: java - 在 Java 中用正则表达式拆分
文章推荐: c# - 使用 LINQ 填充 List