相关疑难解决方法(0)

Spring MVC请求映射处理程序方法中{id:.+}的含义是什么?

我在控制器中遇到了一个方法.这个id是什么:.+ ??

@RequestMapping(value="/index/{endpoint}/{type}/{id:.+}", method=RequestMethod.POST, consumes=kContentType, produces=kProducesType)
@ResponseBody
public String indexData(@PathVariable(value="endpoint") String endpoint, @PathVariable(value="type") String type, @PathVariable(value="id") String id, @RequestBody String body, HttpServletRequest request) {
    logger.debug("In web controller for endpoint " + endpoint);
    return indexController.indexData(endpoint, type, id, body,  getSecurityContextProvider(request));
}
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc

24
推荐指数
1
解决办法
2万
查看次数

为 SPA 前端配置 Spring Framework 5.3+、Spring Boot 2.3+ 路由

我有一个使用 Angular 制作的简单前端应用程序。所有路由均由 Angular 处理,因此我希望 Spring boot 将所有页面流量转发到,"/"以便 Angular 路由可以处理它们。

stackoverflow 中已经有一些已知的答案。他们是:

但它们都不再工作了,因为从Spring Framework 5.3 及更高版本开始,它们 AntPathMatcher已被PathPattern. PathPattern与语法兼容,AntPathMatcher但以下内容除外:

仅允许在模式末尾支持多段匹配的“**”。在为给定请求选择最接近的匹配时,这有助于消除大多数歧义原因。

所以这不再起作用:

  // Match everything without a suffix (so not a static resource)
  @RequestMapping(value = "/**/{path:[^.]*}")
  public String redirectAngularRoutes() {
    return "forward:/";
  }
Run Code Online (Sandbox Code Playgroud)

那么从 Spring Framework 5.3 开始,最好的方法是什么?

我们是否指定每个角度路由及其forward如下所示"/",或者还有其他替代方案?

  @RequestMapping({ "/help/**","/view/**","/admin/**" })
  public String redirectAngularRoutes() {
    return "forward:/";
  }
Run Code Online (Sandbox Code Playgroud)

spring routes single-page-application spring-boot angular

18
推荐指数
1
解决办法
3625
查看次数

静态资源中的 Spring Boot 2.6 和 Angular

我的问题与这个已经被提出和回答的问题非常相似,但不是100%最新的。

我们使用 Chris Gaskill 的解决方案相当长一段时间,它非常适合我们,因为我们想要重定向包含多个路径段的请求(即/foo/bar

从 Spring Boot 2.4 开始,Boot 使用PathPatternParser代替AntPathMatcher,其中前者不再支持**模式的开头(请参阅文档)。

是否有其他解决方案来获得相同的行为?您使用什么将所有与其他内容不匹配的请求重定向到index.htmlAngular 应用程序?

这是转发请求的控制器的代码。

@Controller
class SpaRoutingController {

  @GetMapping("/**/{path:[^\\.]*}", headers = "X-Requested-With!=XMLHttpRequest")
  fun forward(): String? {
      return "forward:/"
  }
}
Run Code Online (Sandbox Code Playgroud)

spring spring-boot angular

7
推荐指数
1
解决办法
1954
查看次数

同一台服务器上的Spring Boot + Angular2

我在本教程之后成功地将我的Angular2应用程序与Spring Boot后端集成,将已编译的JS资源放到/ ui子目录中.基本上一切正常,Angular2应用程序可以通过appname/ui URL访问.

但是,我想知道是否有办法告诉Spring'传递' / ui路径的子网,因为当前Spring拦截了每个请求目标/ ui/*,阻止Angular2路由器正确导航到/ ui路径下的资源.

目前,我只在我的一个控制器中有这个映射:

@RequestMapping(value = "/ui")
public String uiIndex() {
    return "/ui/index.html";
}
Run Code Online (Sandbox Code Playgroud)

有了这个,接口正确地显示在/ ui,但是当我直接从浏览器中解决,Spring会向我发送错误和404 .Angular2应用程序内部的路由器导航工作正常.

编辑

我正在使用此配置将已编译的Angular2资源从target/ui添加到static/ui文件夹(我的项目使用maven构建):

        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <includes>
                <include>*.properties</include>
                <include>templates/*.*</include>
            </includes>
        </resource>
        <resource>
            <directory>target/ui</directory>
            <targetPath>static/ui</targetPath>
        </resource>
Run Code Online (Sandbox Code Playgroud)

要明确的是,唯一的问题是,当我在浏览器中输入像/ ui/home/settings这样的URL时,Spring会拦截请求并抛出错误.我可以愉快地导航到/ ui,然后导航到Angular上下文中的/ home/settings.

java spring spring-boot angular

5
推荐指数
1
解决办法
2441
查看次数