6

我正在使用带有 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 提供了更简单的方法?

4

1 回答 1

4

几点考虑:

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

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

您绝对应该考虑实现 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 验证。这包括hibernate-validator+ javax expression language- 的参考实现JSR 380。它有很多内置约束(例如@NotNull、@Size 等)并且是可扩展的——您可以创建自己的约束来实现正确的接口(AOP 部分由框架处理)。

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

于 2019-03-29T10:44:39.020 回答