我使用Spring Boot启动Web应用程序。它使用一个简单的主类来启动嵌入式tomcat服务器:
@Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
我想以他可以处理的angularjs html5mode的方式配置服务器
$locationProvider.html5Mode(true);
其他用户的相关发布表明你需要重定向到根目录。html5模式从网址中删除hashbag。如果刷新页面,则服务器找不到该页面,因为他不处hash。
我找到了可以接受的解决方案。
@Controller public class ViewController { @RequestMapping("/") public String index() { return "index"; } @RequestMapping("/app/**") public String app() { return "index"; } }
angularjs应用必须在子域应用下。如果你不希望这样做,则可以创建一个子域(例如app.subdomain.com),该子域映射到你的子域应用程序。使用此构造,你不会与webjar,statis内容等发生冲突。
使用此控制器将URI转发到index.html,以保留AngularJS路由。
@Controller public class ForwardController { @RequestMapping(value = "/**/{[path:[^\\.]*}") public String redirect() { // Forward to home page so that route is preserved. return "forward:/"; } }
在此解决方案中,ForwardController仅转发未在Controllernor中定义的路径RestController。这意味着你是否已经:
ForwardController
Controllernor
RestController
@RestController public class OffersController { @RequestMapping(value = "api/offers") public Page<OfferDTO> getOffers(@RequestParam("page") int page) { return offerService.findPaginated(page, 10); } }
两个控制器都将正常工作- @RequestMapping(value = "api/offers")在进行检查之前@RequestMapping(value = "/**/{[path:[^\\.]*}")
@RequestMapping(value = "api/offers")
@RequestMapping(value = "/**/{[path:[^\\.]*}")