我正在使用带有Guice的Sitebricks来实现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
}
这会导致很多复制/粘贴的代码。
我正在寻找一种从请求参数中分离出常见的验证和提取数据逻辑的方法。也许我可以使用AOP来做到这一点,但也许Sitebricks提供了更简单的方法?
答案 0 :(得分:4)
一些注意事项:
我的建议是 不 使用该框架构建任何东西。
您绝对应该考虑实现REST服务的替代方法(例如SpringBoot)。
也许Sitebricks提供了更简单的方法?
话虽如此,Sitebricks似乎并未提供开箱即用的验证功能。
您可以在Sitebrick中找到与验证相关的代码:
@ImplementedBy(AlwaysValidationValidator.class)
public interface SitebricksValidator {
Set<? extends ConstraintViolation<?>> validate(Object object);
}
这:
public class AlwaysValidationValidator implements SitebricksValidator {
@Override
public Set<? extends ConstraintViolation<?>> validate(Object object) {
return null; //unfinished
}
}
这是未完成的实现!
您最好的选择是使用javax validation in a standalone setup。
其中包括hibernate-validator
+ javax expression language
-JSR 380
的参考实现。它在constraints中有很多构建(例如@ NotNull,@ Size等),并且是extensible-您可以创建自己的约束来实现正确的接口(AOP部分由框架处理)
更简单的选择是番石榴的PreConditions。