XZe*_*Zen 6 java guice sitebricks
我正在将Sitebricks与Guice一起使用以实现REST服务,并且我有一组这样的方法:
@Get
@At("/:version/har/mostRecentEntry/assertResponseTimeWithin")
public Reply<?> doSomething(@Named("version") int version, Request<String> request) {
// Validation logic for request parameters ...
// Extracting parameters (converting url params to domain area objects)
// Actual business logic
}
Run Code Online (Sandbox Code Playgroud)
这导致大量复制/粘贴代码。
我正在寻找从请求参数中分离常见的验证和提取数据逻辑的方法。也许我可以使用AOP来做到这一点,但是Sitebricks提供的方法也许更简单?
一些注意事项:
我的建议是不要使用该框架构建任何东西。
您绝对应该考虑实现 REST 服务的替代方案(例如SpringBoot)。
也许 Sitebricks 提供了更简单的方法?
话虽这么说,Sitebricks 似乎并没有提供开箱即用的验证。
您可以在 Sitebrick 中找到与验证相关的代码:
@ImplementedBy(AlwaysValidationValidator.class)
public interface SitebricksValidator {
Set<? extends ConstraintViolation<?>> validate(Object object);
}
Run Code Online (Sandbox Code Playgroud)
和这个:
public class AlwaysValidationValidator implements SitebricksValidator {
@Override
public Set<? extends ConstraintViolation<?>> validate(Object object) {
return null; //unfinished
}
}
Run Code Online (Sandbox Code Playgroud)
这是未完成的实施!
最好的选择是在独立设置中使用javax 验证。这包括 的hibernate-validator
+ javax expression language
-引用实现JSR 380
。它有很多内置约束(例如@NotNull、@Size 等)并且是可扩展的——您可以创建自己的约束来实现正确的接口(AOP 部分由框架处理)。
一个更简单的替代方案是 Guava 的PreConditions。