Spring 为项目中的特定应用定义前端控制器

Spring 为项目中的特定应用定义前端控制器,spring,spring-boot,spring-mvc,Spring,Spring Boot,Spring Mvc,我在一个包含多个REST应用程序的项目中创建了一个前端控制器。现在的问题是,控制器应用于我试图通过浏览器访问的所有应用程序。我想问,是配置还是注释,用于定义控制器应应用于哪个应用程序 这是控制器的代码: @Controller public class FrontendController { @RequestMapping(value = "/") public String index() { return "index"; } } @Profil

我在一个包含多个REST应用程序的项目中创建了一个前端控制器。现在的问题是,控制器应用于我试图通过浏览器访问的所有应用程序。我想问,是配置还是注释,用于定义控制器应应用于哪个应用程序

这是控制器的代码:

@Controller
public class FrontendController {

    @RequestMapping(value = "/")
    public String index() {
        return "index";
    }
}
@Profile("web-server")
在同一个包中,实现了服务于前端源的应用程序:

@SpringBootApplication
public class WebServer {

    public static void main(String[] args) {
        // Tell server to look for web-server.properties or web-server.yml
        System.setProperty("spring.config.name", "web-server");

        SpringApplication.run(com.studienarbeit.chaoscenter.services.departments.DepartmentsServer.class, args);
    }

}
其他应用程序在不同的包中,但它们仍然服务于前端源。项目中没有其他控制器,其他应用程序使用SpringDataREST存储库

注意:每个应用程序都在自己的端口上运行

注2:我尝试了使用控制器配置文件的方法:

@Controller
public class FrontendController {

    @RequestMapping(value = "/")
    public String index() {
        return "index";
    }
}
@Profile("web-server")
由于我使用IntelliJ,我将活动配置文件设置为web服务器,并在特定应用程序的VM选项中添加以下标志:

-Dspring.profiles.active=web-server
不知何故,我的其他应用程序仍然访问前端控制器。也许我错过了什么

注3:其他应用程序实现基本上与WebServer应用程序完全相同,它们使用Spring Data REST存储库,如下所示:

public interface EmployeeRepository extends CrudRepository<Employee, Long> {

}

为每个控制器类使用特定的RequestMapping值,如:

@Controller
@RequestMapping("/controller1")
public class FrontendController {

    @RequestMapping(value = "/")
    public String index() {
        return "index";
    }
}
因此,您将使用该url使用该端点http://localhost:8080/controller1

另外,如果您不打算使用Mvc视图,而这只是一个Rest控制器,请使用@RestController insted@Controller

@RestController
@RequestMapping("/controller1")
public class FrontendController

它是@Controller和@ResponseBody注释的组合。有关详细信息,请访问。

谢谢您的回复。我的每个应用程序都在不同的端口上运行,因为它们是作为微服务实现的。另外,将索引路径保持为/-没有其他选项可以解决这个问题吗?或者以某种方式指定控制器的端口?因此,您的其他控制器具有请求映射as/和@controller注释,并且它们在不同的端口上运行。假设另一个在8081中运行,你可以用它访问,对吗?它应该返回您在Get方法for/path中定义的内容。我不确定我是否理解你的问题。如果您不希望它服务于Mvc视图,那么应该将控制器更改为RestController,这样它将只返回Json/Xml响应。但只要您有到/的请求映射,它就会返回一些响应。目前只有一个控制器应用于我的所有应用程序,尽管它们位于其他包中。其他应用程序没有控制器,但使用SpringDataREST存储库来处理传入的请求。如果我误解了您的问题,我很抱歉。您能举一个这些存储库的例子吗?它们是否标注为@RepositoryRestResource?你说我的其他应用程序访问前端控制器是什么意思,它们是如何访问的?刚刚更新了我的问题。也许我对自己的问题判断错误,问题根本不是控制器。我假设控制器负责提供前端模板文件。但是,也许我所有的Spring引导应用程序都默认为模板文件服务,我所要做的就是禁用其他应用程序的前端。如果你想使用Spring配置文件,你可以实现这一点it@PatelRomil我确实试过了,但不知怎的没有成功。我更新了关于这种方法的答案