我目前需要使用 Spring Boot 来为我的 React 应用程序提供服务。它适用于根 url - localhost:8080/,但 Spring Controller 当然无法识别任何子路由。

我不确定如何让 React 路由和 Spring 请求映射对齐,而无需在每个可能的路由中进行硬编码以映射到 index.html - 然后某些路由已经可变子路线。

<小时 />

这是我的 HomeController,它为 index.html

提供服务
@Controller 
public class HomeController { 
 
    @RequestMapping(value = "/") 
    public String index() { 
        return "index.html"; 
    } 
} 
<小时 />

这是我的 React 应用程序中的路由渲染

const Root = ({ store }) => ( 
  <Provider store={store}> 
    <Router history={browserHistory}> 
      <Route path="/" component={App}> 
        <IndexRedirect to="users"/> 
        <Route path="/org" component={OrgSearch}> 
          {<Route path="/org/:orgId" component={Org}/>} 
        </Route> 
        <Route path="/users" component={UserSearch}> 
          {<Route path="/users/:userId" component={User} />} 
        </Route> 
      </Route> 
    </Router> 
  </Provider> 
) 
<小时 />

非常感谢任何帮助!

<小时 />

编辑:我尝试添加一些通配符功能,但它呈现出一些奇怪的行为。以下是 HomeController 的更新代码。

@Controller 
public class HomeController { 
 
    @RequestMapping(value = {"/", "/users/**", "/org/**"}) 
    public String index() { 
        return "index.html"; 
    } 
} 

我可以访问 //users,但不能访问 /users//users/2545

这是我尝试访问后者时出现的错误。

2017-04-14 09:21:59.896 ERROR 58840 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [index.html]: would dispatch back to the current handler URL [/users/index.html] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause 
 
javax.servlet.ServletException: Circular view path [index.html]: would dispatch back to the current handler URL [/users/index.html] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.) 
    at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:205) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1282) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980) ~[spring-webmvc-4.3.7.RELEASE.jar:4.3.7.RELEASE] 

请您参考如下方法:

对我来说,我尝试了这个 link 中的答案。 我没有 Controller 。

基本上是关于定义 addViewController...

@Configuration 
public class WebConfiguration implements WebMvcConfigurer { 
 
  @Override 
  public void addViewControllers(ViewControllerRegistry registry) { 
      registry.addViewController("/{spring:\\w+}") 
            .setViewName("forward:/"); 
      registry.addViewController("/**/{spring:\\w+}") 
            .setViewName("forward:/"); 
      registry.addViewController("/{spring:\\w+}/**{spring:?!(\\.js|\\.css)$}") 
            .setViewName("forward:/"); 
  } 
} 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!