如何在 spring mvc 中使 webjars 版本不可知
How to make webjars version agnostic in spring mvc
我已经按照他们网站上的描述遵循了文档here
首先我添加了所需的路径
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
然后我用以下内容创建了一个控制器
@ResponseBody
@RequestMapping("/webjarslocator/{webjar}/**")
public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) {
try {
String mvcPrefix = "/webjarslocator/" + webjar + "/"; // This prefix must match the mapping path!
String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length()));
return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
缺少一些依赖项,所以我在 maven 中添加了以下 pom
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.28</version>
</dependency>
以上将导入以下内容
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.core.io.ClassPathResource;
None 其中已从外部 jar 导入。
错误是:assetLocator cannot be resolved
编辑:可能是我需要创建一个过滤器而不是将其放入控制器中。对此有什么想法吗?
documentation 非常稀疏,但您可以使用 new WebJarAssetLocator()
创建资产定位器实例。
这是另一个解决方案,考虑到 WebJar 的最新版本,对于其他偶然发现此问题的人来说也是如此。使用 org.webjars.play.WebJarsUtil#locate(java.lang.String, java.lang.String)
(反过来使用 org.webjars.WebJarAssetLocator#getFullPath(java.lang.String, java.lang.String)
)接受 WebJar 名称(充当范围)和文件,而无需提供需要包含版本的完整路径。
我已经按照他们网站上的描述遵循了文档here
首先我添加了所需的路径
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
然后我用以下内容创建了一个控制器
@ResponseBody
@RequestMapping("/webjarslocator/{webjar}/**")
public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) {
try {
String mvcPrefix = "/webjarslocator/" + webjar + "/"; // This prefix must match the mapping path!
String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length()));
return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
缺少一些依赖项,所以我在 maven 中添加了以下 pom
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.28</version>
</dependency>
以上将导入以下内容
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.core.io.ClassPathResource;
None 其中已从外部 jar 导入。
错误是:assetLocator cannot be resolved
编辑:可能是我需要创建一个过滤器而不是将其放入控制器中。对此有什么想法吗?
documentation 非常稀疏,但您可以使用 new WebJarAssetLocator()
创建资产定位器实例。
这是另一个解决方案,考虑到 WebJar 的最新版本,对于其他偶然发现此问题的人来说也是如此。使用 org.webjars.play.WebJarsUtil#locate(java.lang.String, java.lang.String)
(反过来使用 org.webjars.WebJarAssetLocator#getFullPath(java.lang.String, java.lang.String)
)接受 WebJar 名称(充当范围)和文件,而无需提供需要包含版本的完整路径。