java - Spring boot - Controller 捕获所有 URL

标签 java spring spring-mvc spring-boot

我正在构建一个 Spring boot Web 应用程序,并使用注释进行 Controller /url 映射。

我有几个用 @RequestMapping 注释的 Controller ,并设置了 url 值(空字符串和特定 URL),这些 Controller 工作正常,例如

@Controller
@RequestMapping("/accounts")
class SignInController {

    @Autowired PartyService partyService

    @RequestMapping(value="", method = RequestMethod.GET )
    public String signinPage( Model model) {

导航到/accounts 可以正确呈现登录页面。

但是,如果我添加一个没有 RequestMapping 值的 Controller ,例如

@Controller
class CustomController {

    @RequestMapping
    public String transform( Model model ) {

然后,我输入的任何与任何其他特定 Controller 不匹配的 URL 都会由该 Controller 处理(因此我期望 404 的页面都只渲染此页面)。这是预期的行为吗?我没想到会出现这种情况,并且由于 RequestMapping 值默认为空并且是一个 antMatcher,我不会认为它会处理所有其他 URL。

我这个 Controller 没有定义 RequestMapping 的原因是因为我还想定义一个 SimpleUrlMappingHandler ,其中包含一些指向该 Controller 的显式 URL,如果我不这样做不包含该 Controller 的 @Controller@RequestMapping 注释,然后我收到一个关于无法找到处理程序方法的错误(也许问题是我有错误-了解其实现细节)。

我的自定义 Controller 应该处理所有 URL 吗?如果是这样,我可以做些什么,这样它就不会被调用,而只会被我定义的显式 SimpleUrlMappingHandler 调用吗?

最佳答案

正如评论中提到的 - 我刚刚从类中删除了 @Controller 注释,然后在我的配置类中将 Controller 显式定义为 @Bean 并显式将其分配给 SimpleUrlMappingHandler 配置中的映射

关于java - Spring boot - Controller 捕获所有 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633601/

相关文章:

java - Java多线程基本控制台程序

spring - 当 Spring 无法验证模型的 java.util.Date 字段时,如何显示用户友好的错误?

java - 是否可以在同一个 java web 应用程序中使用 xml 创建一些 bean,并使用基于注释的方法创建其余的 bean

java - JAR 文件在 Eclipse 中呈灰色显示

java - eclipse maven 找不到前缀 'maven-assembly-plugin' 的插件

java - 将字符串转换为 json 不起作用 java

java - 有或没有提交到服务器的Spring JSP文件上传

spring - 如何在容器级别使遗留 webapp spring 感知 bean Autowiring 到 Servlet 中?

java - 配置 Intellij 的 "New Project"默认值以使用 Spring MVC 版本 5

java - 为什么仅当我的 Controller 具有@RequestMapping (produces = ...) 时,Spring 的 HandlerInterceptorAdapter 才会被调用两次?