方法拦截或验证Sitebricks控制器中的请求参数

问题描述 投票:6回答:1

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

java guice sitebricks
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 validation in a standalone setup。这包括hibernate-validator + javax expression language - JSR 380的参考实现。它在constraints中有很多构建(例如@NotNull,@ Size等)并且是extensible - 您可以创建自己的约束来实现正确的接口(AOP部分由框架处理)。

一个更简单的选择是番石榴的PreConditions

© www.soinside.com 2019 - 2024. All rights reserved.