springmavenspring-mvcwebjars

How to make webjars version agnostic in spring mvc


I have followed the documentation on their website as described here

First of all I added the required path

<mvc:resources mapping="/webjars/**" location="/webjars/"/>

then I created a controller with the following

@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);
    }
}

Few dependencies were missing so I added in maven the following pom

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator</artifactId>
    <version>0.28</version>
</dependency>

The above will import the following

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 of these has been imported from the external jar.

The error is: assetLocator cannot be resolved

EDIT: It could be that I need to create a filter rather than put it in a controller. Any thoughts on this?


Solution

  • The documentation is quite sparse, but you can create an instance of an asset locator with new WebJarAssetLocator().