JSR交叉字段验证

时间:2013-09-22 06:58:47

标签: java web-services jsr

我对JSR交叉字段验证有疑问。 我有一个基于休息的服务,用于获取和发布。所以我有类似

的东西
@GET
ItemOfferId getItem(String)

其他就是那个

@Post
boolean setItem(ItemOfferId)

在ItemOfferId类中,我有一个名为@validoffer的类级别注释。 所以我喜欢这个课程

@validOffer
Class ItemOfferId{
  OfferId offer;
  ItemId item;
}


@Target({ ElementType.TYPE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { OfferValidator.class })
public @interface  ValidOffer {

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

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

public class Validator implements ConstraintValidator<ValidOffer,ItemOfferId>{
  //i get here ItemOfferId object and do my custom validation
}

现在我的问题是,有一些特定于“获取”服务的约束,一些特定于“设置”服务。 get和set的方法都使用相同的对象。 有没有办法告诉注释它是否启用了获取验证。 所以基本上我想根据运行时方法调用传递一些参数。?

有可能......? 我在互联网上搜索过很多但找不到答案...... 如果我能找到解决这个问题的方法,那将是非常好的。

谢谢, 斯瓦特

1 个答案:

答案 0 :(得分:0)

您是否考虑使用带有值的自定义JSR 303约束。然后验证器使用该值来确定应如何验证它。

因此,在您的情况下,您将在帖子上使用与验证器不同的值或获得验证以告知其验证哪种模式。

此处有一个示例可以准确显示您需要执行的操作see 3.1 Creating a simple constraint