限制 NinjaFramework 中控制器方法中的参数数量?

Posted

技术标签:

【中文标题】限制 NinjaFramework 中控制器方法中的参数数量?【英文标题】:Limit to number of arguments in a controller method in NinjaFramework? 【发布时间】:2017-09-14 11:13:21 【问题描述】:

我正在使用 NinjaFramework 6.0,尝试将第 10 个 @Param 添加到我的控制器方法中,现在我在编译 Routes.java 时收到“找不到适用于 with(Controller[...]Index) 的合适方法”错误。

我的方法是这样的:

public Result personIndex(
        @Param("ssn") Optional<String> ssn,             
        @Param("dodId") Optional<String> dodId,             
        @Param("firstName") Optional<String> firstName, 
        @Param("middleName") Optional<String> middleName, 
        @Param("lastName") Optional<String> lastName,
        @Param("birthday") Optional<String> birthday, 
        @Param("branch") Optional<String> branch, 
        @Param("rateRank") Optional<String> rateRank, 
        @Param("status") Optional<String> status, 
        @Param("page") Optional<Integer> page)  ... 

如果我删除其中一个参数,那么一切都会编译并工作。这是硬限制吗?我应该将这些封装成某种形式/ dto 对象吗?

--

使用这种类型的路由配置时,这似乎是一个问题:

router.GET().route("/persons").with(PersonController::personIndex);

如果我切换到“旧”方式,它可以正常工作:

router.GET().route("/persons").with(PersonController.class, "personIndex");

【问题讨论】:

【参考方案1】:

在浏览 Ninja 文档 (http://www.ninjaframework.org/documentation/basic_concepts/routing.html) 时,我注意到以下文字

类 ninja.ControllerMethods 定义了各种接口,这些接口是 Java 8 lambda 表达式可接受的方法签名。控制器方法返回一个 ninja.Result 并且有 0 到 12 个参数。如果需要超过 12 个参数,可以回退到 Ninja 遗留的 Class + “method”的路由策略。

不确定是否从 6.0 版本有所改变,但 10 个参数应该可以工作。

【讨论】:

以上是关于限制 NinjaFramework 中控制器方法中的参数数量?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core 中控制器方法中的绑定 Guid

从 MVC 中控制器中的不同方法向视图发送消息

yii2中控制器中怎么调用模型

ASP.net core 3.1 中控制器和剃须刀页面之间的路由

Spring 项目中控制器和服务类的通用类

MVC模式中控制器(servlet)接收请求参数、调用DAO、保存处理结果、改变路径并转发(响应)