@ConvertGroup 基于参数
@ConvertGroup based on parameter
我希望使用基于参数的组来实现 bean 验证。这个想法是让方法具有如下签名:
@POST
@Path("/id-{id}")
public SomeDTO updateProducer(@PathParam("id") String id, @MatrixParam("update") Class<ConvertGroupTarget> update, @Valid SomeDTO data);
这相当于显式 ConvertGroup
声明,例如:
@POST
@Path("/id-{id}")
public SomeDTO updateProducer(@PathParam("id") String id, @Valid @ConvertGroup(from=Default.class, to=/*some class that implements ConvertGroupTarget*/) SomeDTO data);
这有可能吗?我们正在使用 Jersey
和 hibernate-validator
。
编辑:这一切的目的。假设我想基于某些特定目的的验证组来验证 bean。例如,一些 bean 可以有不同的规则应用于创建和更新它。所以 bean 声明如下所示:
class SomeDTO {
@NotNull(groups = {Create.class, Update.class})
private String id;
@NotNull(groups = {Create.class, Update.class})
private String name;
@NotNull(groups = Update.class)
private String something;
//getters, setters etc.
}
类 创建和更新只是一些标记 classes/interfaces 以提供组的类型化声明。
现在,假设 API 用户正在创建一个实体并且他创建了
POST /id-X123/;update=create
。这里我只想验证ID和名称,但并不真正关心bean的something
属性。但是当 API 用户想要更新 bean 时,API 应该要求他甚至指定 something
属性。这通常是通过转换验证组来完成的——@ConvertGroup(from = Default.class, to = Create.class)
用于创建,@CovertGroup(from = Default.class, to = Update.class)
用于更新。但是,我希望跳过 ConvertGroup
注释的显式声明,并根据参数以编程方式执行此操作。
ConvertGroup 定义静态组转换,因此您无法对其进行参数化。您一劳永逸地定义它们。
我想你要做的是用一个组来调用Validator。我不使用 Jersey,所以我不知道他们是否有钩子,但你应该寻找的是:
Set<ConstraintViolation<SomeDTO>> violations =
validator.validate(someDTO); // validate the default group
Set<ConstraintViolation<SomeDTO>> violations =
validator.validate(someDTO, Update.class); // validate the Update group
我希望使用基于参数的组来实现 bean 验证。这个想法是让方法具有如下签名:
@POST
@Path("/id-{id}")
public SomeDTO updateProducer(@PathParam("id") String id, @MatrixParam("update") Class<ConvertGroupTarget> update, @Valid SomeDTO data);
这相当于显式 ConvertGroup
声明,例如:
@POST
@Path("/id-{id}")
public SomeDTO updateProducer(@PathParam("id") String id, @Valid @ConvertGroup(from=Default.class, to=/*some class that implements ConvertGroupTarget*/) SomeDTO data);
这有可能吗?我们正在使用 Jersey
和 hibernate-validator
。
编辑:这一切的目的。假设我想基于某些特定目的的验证组来验证 bean。例如,一些 bean 可以有不同的规则应用于创建和更新它。所以 bean 声明如下所示:
class SomeDTO {
@NotNull(groups = {Create.class, Update.class})
private String id;
@NotNull(groups = {Create.class, Update.class})
private String name;
@NotNull(groups = Update.class)
private String something;
//getters, setters etc.
}
类 创建和更新只是一些标记 classes/interfaces 以提供组的类型化声明。
现在,假设 API 用户正在创建一个实体并且他创建了
POST /id-X123/;update=create
。这里我只想验证ID和名称,但并不真正关心bean的something
属性。但是当 API 用户想要更新 bean 时,API 应该要求他甚至指定 something
属性。这通常是通过转换验证组来完成的——@ConvertGroup(from = Default.class, to = Create.class)
用于创建,@CovertGroup(from = Default.class, to = Update.class)
用于更新。但是,我希望跳过 ConvertGroup
注释的显式声明,并根据参数以编程方式执行此操作。
ConvertGroup 定义静态组转换,因此您无法对其进行参数化。您一劳永逸地定义它们。
我想你要做的是用一个组来调用Validator。我不使用 Jersey,所以我不知道他们是否有钩子,但你应该寻找的是:
Set<ConstraintViolation<SomeDTO>> violations =
validator.validate(someDTO); // validate the default group
Set<ConstraintViolation<SomeDTO>> violations =
validator.validate(someDTO, Update.class); // validate the Update group