我在一个包含多个(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> {
}
答案 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。