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

时间:2019-05-26 21:07:49

标签: spring spring-boot spring-mvc

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

这是控制器的代码:

@Controller
public class FrontendController {

    @RequestMapping(value = "/")
    public String index() {
        return "index";
    }
}

在同一包中,实现了为前端源提供服务的应用程序:

@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);
    }

}

其他应用程序使用不同的程序包,但它们仍可提供前端源。项目中没有其他控制器,其他应用程序都使用Spring Data REST存储库。

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

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

@Profile("web-server")

由于我使用IntelliJ,因此将活动配置文件设置为web-server,并在特定应用程序的VM Options中添加以下标志:

-Dspring.profiles.active=web-server

我的其他应用程序仍然以某种方式访问​​前端控制器。也许我确实错过了什么?

注释3:其他应用程序实现基本上看起来像WebServer应用程序,它们使用的Spring Data REST存储库如下所示:

public interface EmployeeRepository extends CrudRepository<Employee, Long> {

}

1 个答案:

答案 0 :(得分:1)

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

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

    @RequestMapping(value = "/")
    public String index() {
        return "index";
    }
}

因此,您将使用URL http://localhost:8080/controller1

使用此终结点

此外,如果您不打算使用Mvc视图,而这只是一个Rest Controller,请使用@RestController插入的@Controller。

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

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