[spring-projects/spring-boot]映射端点找不到具有自定义 servlet 名称的调度程序 servlet

2024-04-17 542 views
3

迭代所有 ServletRegistrationBean 并添加它们的映射(如果它们的 Servlet 是 DispatcherServlet)。确保通过 ServletRegistrationBean 注册并公开为 Bean 的 servlet 不会被描述两次。

修复 gh-13186

我针对 2.0.x 分支执行此操作,因为我认为它可以包含在维护版本中。如果您认为不能,那将是不幸的(因为我们需要等待 2.1?),但我可以修改 PR 以针对 master 分支

回答

5

@filiphr #13186 在待办事项中分配(即 2.1)。

7

我认为原因更多在于您计划如何实现内容,并且您可能会考虑接受在早期版本中实现的 PR。

2.0.x 不被接受有什么具体原因吗?这个 PR 有什么问题吗?

问题是,目前在 2.0.2 中,即使我将 公开DispatcherServletBeanBoot,也只会在 Bean 名称DispatcherServlet与 Servlet 名称相同时正确初始化映射。ServletRegistrationBean

9

请查看待办事项里程碑的描述。还有一个2.0.x里程碑。

6

我看到了,一个人只能希望?我已将 PR 的基础从 更改2.0.xmaster.

如果你能重新考虑一下我真的会很感激吗?

2

使用通用名称可能比getServlet()公开更值得。

1

标记为团队关注,看看我们是否对 2.0 感到满意。我想我会同意的。

7

@filiphr在 Gitter 上提出了很好的观点:

名字错了。我在 ServletRegistrationBean 中有一个 servlet 的自定义名称,但 servlet 的名称与该名称不匹配。它找不到孩子。问题就在这里。 Tomcat中搜索时使用bean名称

因此,如果您使用自定义 servlet 名称,即使您将Servlet和 theServletRegistrationBean作为 beans 公开,我们也将无法找到它,因为我们使用的是 bean 名称而不是 servlet 名称。我认为这应该被视为一个错误。修复它需要我们按照此处的建议查找 servlet 注册 bean。简而言之,我对 2.0.x 也很满意。

4

感谢您将其定位到 2.0.x。我应该将 PR 的目标分支更改回 2.0.x 吗?

顺便说一句@philwebb 你说:

使用泛型可能比公开 getServlet() 更值得。

哪个通用?位于父ServletRegistrationBean#servlet类中ServletRegistrationBean而不是位于父类中。我找不到其他方法来解决这个问题。也许我错过了什么?

0

感谢您将其定位到 2.0.x。我应该将 PR 的目标分支更改回 2.0.x 吗?

不需要,我们只需挑选提交

使用泛型可能比公开 getServlet() 更值得。

我想也许可以<T>从看看ServletRegistrationBean<T>。事后看来,我不确定这比getServlet()公开更好。现在不用费心去改变它,我们会看看团队其他成员认为最好的。

3

我在想也许可以<T>ServletRegistrationBean<T>

如果您正在考虑反射并仅获取类型,那么这还不够,因为我们需要实际的 servlet(因此触发器可能会发生)。

只是为了提供信息,我在查看后更改了它AbstractFilterRegistrationBean#getFilter(),它是public

无论如何,如果我这边有什么需要改变的地方,请告诉我,我对任何修改都没有问题,对我来说它的功能很重要?

2

你们可能在其他问题和下一个功能版本上还有很多工作要做。

只是想问一下这个的状态如何?我还可以做些什么以便我们可以在 2.0.4 的下一个补丁中获得它吗?还是有其他东西阻碍了这一点?

3

@filiphr 没有什么可以阻止这一点。我们通常会在发布之前进行 PR 扫描,因此除非出现不可预见的情况,否则我们应该能够将其纳入 2.0.4。

9

感谢 PR @filiphr,我用稍微不同的方法解决了这个问题,请参阅 3423c5d 了解更多详细信息。

7

感谢您修复此问题@snicoll。我有点难过它的 PR 没有被合并,但我学到了一些新东西,这总是好的。

期待2.0.4

3

如果您有机会测试快照,我们将不胜感激。

5

@snicoll我刚刚尝试了一下,效果很好(正如预期的那样)。感谢您进行此改进。它甚至在 IntelliJ 端点映射中也能很好地工作。

只有一件小事,那就是 Actuator 端点被映射到每个 servlet 中。但是,这与此问题无关,我认为您对此不感兴趣(这对我来说很好)