Spring Boot 集成 React 前端路由问题
0x00 背景
趁着最近疫情窝在家无所事事,着手为自家的公寓开发了一个简易管理系统,实现了入住登记,缴纳各种费用等一些常用功能。
0x01 问题
打算把React和SpringBoot打成一个Jar包,然后直接丢到Docker上进行部署,映射一个端口出来提供服务。但是发现这样的话SpringBoot会接管前端路由,导致找不到地址的时候SpringBoot直接抛404,前端路由无效。
0x02 解决
我们需要当服务端找不到地址的时候直接抛给前端,即index.html。
新建一个配置类 StaticResourceMap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @Configuration public class StaticResourceMap implements WebMvcConfigurer {
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**") .addResourceLocations("classpath:/frontend/") .resourceChain(true) .addResolver(new PathResourceResolver(){ @Override protected Resource getResource(String resourcePath, Resource location) throws IOException { Resource resource = super.getResource(resourcePath, location); if (resource == null){ resource = super.getResource("index.html", location); } return resource; } }); } }
|