gpt4 book ai didi

java - 静态方法或 getter 上的 Bean 验证列表

转载 作者:行者123 更新时间:2023-11-29 08:55:46 24 4
gpt4 key购买 nike

我在 Jersey 上触发自定义约束验证时遇到问题。我想激活对方法或静态方法的约束。我尝试过在方法之上放置一个自定义注释和 @ValidateOnExecution,但自定义 validator 类仍然没有被触发。

@LocationIsValid
@ValidateOnExecution
public static List<Double> getLocation(String location) {
...
}

我怀疑是bean annotation不支持静态方法的问题,所以去掉static关键字,通过新建对象访问方法。然而,自定义 LocationIsValid validator 仍未激活。

因此,我最终放置了一个 validator 工厂来手动验证该变量。

public static List<Double> getLocation(String location) {
...
// split the location string into a list of double
...
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
validator.validate(location, LocationIsValid.class);
}

但是自定义约束不会让步。我希望有人能给我提供下一步该做什么的线索,或其他解决此问题的建议。

更多信息

当注解放在资源字段的顶部时,它可以正常工作。

public class Product {

...

@LocationIsValid
private List<Double> location;

...

}

已更新

即使我已经将方法更改为普通实例方法,它仍然不起作用。请注意,我有两个重载方法,一个是资源 getter ,另一个是将字符串转换为位置。

产品型号

public class Product {

@Id
@JsonSerialize(using = ObjectIdSerializer.class)
private ObjectId id;
@Size(min = 5)
private String name;
@NotNull
@LocationIsValid
private List<Double> location;

private Date dateCreated;

private Date dateModified;

public Product() {

}

public List<Double> getLocation() {
return location;
}

@ValidateOnExecution
@LocationIsValid
public List<Double> getLocation(String location) {
String[] locationString = location.split(";");

if (locationString.length != 2) {
return null;
}

List<Double>locations = new ArrayList<Double>();
for (int i = 0; i < locationString.length; i++) {
locations.add(Double.parseDouble(locationString[i]));
}
return locations;
}


// Other setters getters

}

产品资源

@GET
public ProductList getProducts(@QueryParam("near") String location) {
// parse the locations variable
Product product = new Product();
// did not work
// I have placed a breakpoint on the LocationIsValid
List<Double> locations = product.getLocation(location);
}

注意:我很确定问题不在 LocationIsValid 中,因为当我将其验证为实体 @Valid Product product 时它可以正常工作 我正在使用 Jersey 2.4.1 和 jersey-bean -验证 2.4.1 依赖

最佳答案

如您所说,Bean 验证规范不支持静态方法的验证。实例方法的验证应该可以,但是您可以发布 JAX-RS 资源的完整代码吗? getLocation() 是否在该资源上定义? JAX-RS 应该触发对资源类方法的方法约束(无论是参数还是返回值约束)的验证。

关于java - 静态方法或 getter 上的 Bean 验证列表<?>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340496/

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