【问题标题】:Method interception or validation of request params in Sitebricks controllerSitebricks 控制器中请求参数的方法拦截或验证
【发布时间】:2019-03-20 07:54:51
【问题描述】:

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

【问题讨论】:

    标签: java guice sitebricks


    【解决方案1】:

    一些注意事项:

    • Google 的 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 部分由框架处理)。

    更简单的选择是 Guava 的 PreConditions

    【讨论】:

    • 谢谢,这些考虑很有意义,如果我有机会摆脱网站砖就好了。
    • 不客气,但如果您必须坚持使用 Sitebricks,您会看到验证实施尚未完成。您需要选择使用某些框架(例如,正如我建议的 javax.validation - JSR 380),它确实利用了 AOP,或者您自己使用其他东西实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2018-03-03
    相关资源
    最近更新 更多