如何解决带有AngularJS html5Mode的Spring Boot
我找到了可以接受的解决方案。
@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
。这意味着你是否已经:
@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:[^\\.]*}")
解决方法
我使用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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。