Resteasy(JBoss AS 6)验证
我正在寻找一种为Resteasy服务提供自定义输入验证的好模式 假设我有这项服务:Resteasy(JBoss AS 6)验证,jboss,resteasy,jboss6.x,Jboss,Resteasy,Jboss6.x,我正在寻找一种为Resteasy服务提供自定义输入验证的好模式 假设我有这项服务: @Local @Path("/example") public interface IExample { public Response doSomething ( @QueryParam("arg1") String arg1, @QueryParam("arg2") Integer arg2); } 我已经实施了: @Stateless public class Example implements I
@Local
@Path("/example")
public interface IExample {
public Response doSomething ( @QueryParam("arg1") String arg1, @QueryParam("arg2") Integer arg2);
}
我已经实施了:
@Stateless
public class Example implements IExample {
@Override
public Response doSomething ( String arg1, Integer arg2 ) { ... }
}
验证arg1和arg2的最佳实践是什么
我的想法是:
public class ExampleValidator implements IExample {
public static class ValidationError extends RuntimeException { ... }
@Override
public Response doSomething ( String arg1, Integer arg2 ) {
// here do validation. In case of failure, throw ValidationError
return null;
}
}
可按如下方式使用:
@Stateless
public class Example implements IExample {
@Override
public Response doSomething ( String arg1, Integer arg2 ) {
try {
(new ExampleValidator()).doSomething(arg1, arg2);
} catch ( ValidationError e ) {
// return Response with 400
}
}
}
这样,当我更改IExample.doSomething方法签名时,由于编译时错误,我必须更新验证器。为了使Resteasy不将ExampleValidator解释为服务,我使用了Resteasy.jndi.resources而不是Resteasy.scan,但它失败了(在Resteasy尝试在部署时使用它之后加载了示例bean)
有什么想法吗?有什么好的验证模式吗?
还是有可能以某种方式让我的概念发挥作用
编辑:或者,Resteasy中有一些过滤器对应项,哪一个最好?在实际实现之前调用我的方法(过滤器),但参数(arg1,arg2)已经解析的方案
提前感谢,很抱歉发了这么长的帖子;)
Kamil(1)最干净的方法可能是使用JavaEE6bean验证框架。这需要编写自定义验证拦截器。在这种情况下,您必须更改方法,因此
public Response doSomething ( String arg1, Integer arg2 )
您可以使用域对象作为参数
public Response doSomething ( JAXBElement<MyDomainObject> myOJaxb )
但这适用于路径参数,而不是查询参数(我想,但没有检查JAX-RS规范)
您的选择取决于界面的灵活性和时间
如果您能提出一个类似于选项(3)中建议的通用、可插入到Resteasy的解决方案,并在GitHub上实现开源,许多人会喜欢您:)
@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}")