我愿设立我的神职人员,使用Hibernate Validator(作鉴定)和谷歌古冰(供DI和拦截方法使用)。
理想的情况是,如果任何“失败”的验证方法会导致拦截方法被称作:
public class Widget {
@NotNull
public Fizz getFizz() {
return fizz;
}
}
public class FailedWidgetInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable {
// This gets executed if Widget s getFizz() returns null...
}
}
但如Hibernate Validator,只有允许你通过明文通过标语<>T至<代码>ClassValidator<T> sget InvalidValues(
)。
因此,我需要一个地方来发出这样的呼吁! <>只有>可行的解决办法 我可以想到的是,创造我自己的诺言(在!) 也许这样看:
@NotNull
public @interface AutoValidatingNotNull {
// ...??
}
之后在Guice Module
上:
public class WidgetModule implements Module {
public void configure(Binder binder) {
binder.bindInterceptor(
any(),
annotatedWith(AutoValidatingNotNull.class),
new ValidatingWidgetInterceptor()
);
}
}
public class ValidatingWidgetInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) throws Throwable {
ClassValidator<Widget> widgetValidator = new ClassValidator<Widget>();
InvalidValue[] badVals = widgetValidator.getInvalidValues(widget);
if(badVals.length > 0)
handleFailedValidationAndThrowRuntimeExceptionOrSomething();
}
}
最后,为了修改<条码>植被(>)条码>:
@AutoValidatingNotNull
public Fizz getFizz() {
return fizz;
}
仅限invoke <>code>方法内,,我如何在
。widget
e(我们希望确认)栏目上接手?。 是否有办法通过说明通过<代码>widget
Edit:
Doesn t look like I can pass Object
into annotations (as parameters)...
第二,这是一种新生事物。 或许 不要看一下Hibernate Validator提供的对我来说是看一看的? 是否有更好的途径? 提前感谢!