html - Spring Boot 与 AngularJS html5Mode

我使用 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);

其他用户的相关帖子显示需要重定向到root。 html5 模式从 url 中删除 hashbag。如果您刷新页面,服务器不会找到该页面,因为他不处理哈希。见:AngularJS - Why when changing url address $routeProvider doesn't seem to work and I get a 404 error

最佳答案

使用此 Controller 将 URI 转发到 index.html 以保留 AngularJS 路由。来源 https://spring.io/blog/2015/05/13/modularizing-the-client-angular-js-and-spring-security-part-vii

@Controller
public class ForwardController {

    @RequestMapping(value = "/**/{[path:[^\\.]*}")
    public String redirect() {
        // Forward to home page so that route is preserved.
        return "forward:/";
    }
} 

在此解决方案中,ForwardController 仅转发路径,这些路径未在任何其他 ControllerRestController 中定义。这意味着如果您已经拥有:

@RestController
public class OffersController {

    @RequestMapping(value = "api/offers")
    public Page<OfferDTO> getOffers(@RequestParam("page") int page) {
        return offerService.findPaginated(page, 10);
    }
} 

两个 Controller 都将正常工作 - @RequestMapping(value = "api/offers")@RequestMapping(value = "/**/{[path:[ ^\\.]*}")

https://stackoverflow.com/questions/24837715/

相关文章:

java - Maven:没有要编译的资源

java - spring-boot 健康未显示详细信息(withDetail info)

java - 在 @Configuration 类中的 Spring 中设置注释驱动的事务

java - 事务注释在 Spring Boot 中不起作用

spring - 使用 Java 注释使用 Spring 发送电子邮件

spring - 禁用 Spring 日志,以获得可读日志

java - spring 是否有一个关闭过程来放置清理代码?

spring - 如何在 Spring Boot Jackson 日期序列化中应用默认时区

java - Spring security - 禁用注销重定向

java - Spring MVC 缺少 URI 模板变量