使用Spring时为控制器使用不同的包

时间:2014-10-17 17:23:00

标签: java spring spring-mvc

如果我在spring工具包中创建一个标准的Spring项目,那就太棒了!

我访问localhost:8080 / greeting并得到我的hello world响应。

如果我将这2个文件复制到我的源代码树中的另一个包中,然后访问localhost:8080 / greeting我得到了:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Oct 17 18:15:45 BST 2014
There was an unexpected error (type=Not Found, status=404).

将3个类移动到相同的默认包中可以解决问题,但从源树组织的角度来看,这不是我想要做的。

我希望这是由于某些自动配置所以请有人告诉我我必须做什么才能让我的项目支持多个包作为控制器和对象。

3 个答案:

答案 0 :(得分:14)

如果您的代码在this教程中显示,那么 打开servlet-context.xml并更改

<context:component-scan base-package="..."/>

您可以列出多个包。使用逗号作为分隔符。

<强>更新

那是基于XML的配置。

如果您创建“Spring Boot App”,则配置是基于注释的。在这种情况下,您需要搜索使用@ComponentScan注释的类。通常它是一个名为AppConfig的主类或类。

默认情况下,它会从类'package开始递归搜索控制器和其他组件。您可以向此注释添加参数,如下所示:

@ComponentScan({ "x.y.z.services", "x.y.z.controllers" })

答案 1 :(得分:1)

将Springbootapplication(application.java)文件移动到另一个软件包为我解决了这个问题。将其与控制器和存储库分开。您可以使用任意数量的软件包并具有多个控制器。但是请使用@ComponenScan(basePackages={" "," "})并提及所有软件包。

答案 2 :(得分:0)

假定主要方法位于com.setech.app包中,而控制器位于com.setech.controller包中。

对于spring-boot 1.3.x或更高版本,请尝试添加“ scanBasePackages”。

@SpringBootApplication(scanBasePackages = { "com.setech"} )
public class ResttanslatorApplication {

    public static void main(String[] args) {

        SpringApplication.run(ResttanslatorApplication.class, args);
    }
}

信贷从here发给卡米尔·沃兹尼亚克。