我正在将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
}

这导致了大量的复制/粘贴代码。

我正在寻找从请求参数中分离出常见的验证和提取数据逻辑的方法。也许我可以使用AOP来做到这一点,但也许Sitebricks提供了更简单的方法?

最佳答案

一些注意事项:

  • Google的Sitebricks项目已死
  • 官方网站关闭(sitebricks.org)
  • 最后Github提交-2015

  • 我的建议是而不是用该框架构建任何东西。

    您绝对应该考虑实现REST服务的替代方法(例如SpringBoot)。



    话虽如此,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-您可以创建自己的约束来实现正确的接口(interface)(AOP部分由框架处理)。

    一个更简单的替代方法是Guava的PreConditions

    09-30 17:13