Grails3-获取服务中的资产路径

Grails3-获取服务中的资产路径,grails,asset-pipeline,grails-3.0,grails-services,Grails,Asset Pipeline,Grails 3.0,Grails Services,我需要获取Grails3服务中位于assets/schemas/resource.json中的静态资源的路径 目前它被定义为 private final String SCHEMA = 'grails-app/assets/schemas/resource.json', 这对于开发环境很好,但对于生产环境当然不好,因为它位于/assets/resource.json中 在我的案例中,我试图寻找如何利用资产管道,但到目前为止我真的不知道:p 提前谢谢 这在文档中有介绍。 在控制器或服务中,注入

我需要获取Grails3服务中位于assets/schemas/resource.json中的静态资源的路径

目前它被定义为

private final String SCHEMA = 'grails-app/assets/schemas/resource.json',
这对于开发环境很好,但对于生产环境当然不好,因为它位于/assets/resource.json中

在我的案例中,我试图寻找如何利用资产管道,但到目前为止我真的不知道:p

提前谢谢

这在文档中有介绍。

在控制器或服务中,注入assetResourceLocator并使用assetResourceLocator.findAssetForURI

文档中介绍了它。


在控制器或服务中,注入assetResourceLocator并使用assetResourceLocator.findAssetForURI,它在本地工作,但部署到服务器时不工作。使用Grails3.1.0、Java1.8.091和Tomcat8.0.33

assetResourceLocator?.findAssetForURI('myFolder/placeholder.jpg')?.byteArray
返回

groovy.lang.MissingPropertyException:没有此类属性:类的byteArray:org.springframework.web.context.support.ServletContextResource

编辑:解决它:


它在本地工作,但部署到服务器时不工作。使用Grails3.1.0、Java1.8.091和Tomcat8.0.33

assetResourceLocator?.findAssetForURI('myFolder/placeholder.jpg')?.byteArray
返回

groovy.lang.MissingPropertyException:没有此类属性:类的byteArray:org.springframework.web.context.support.ServletContextResource

编辑:解决它:

完整示例:

class ExampleService {
  def assetResourceLocator

  def someMethod() {
    Resource res = assetResourceLocator.findAssetForURI('test.css')
    String url = res.getURL()
    String uri = res.getURI()
  }
}
来源:

完整示例:

class ExampleService {
  def assetResourceLocator

  def someMethod() {
    Resource res = assetResourceLocator.findAssetForURI('test.css')
    String url = res.getURL()
    String uri = res.getURI()
  }
}

来源:

谢谢,我在开发中遇到了同样的问题,但在生产中没有。这个解决方案在Grails2.4.5中也适用于我!这里的输入流需要关闭吗?谢谢,我在开发中遇到了同样的问题,但在生产中没有。这个解决方案在Grails2.4.5中也适用于我!这里的输入流需要关闭吗?你是对的:我的问题的解决方案应该是assetResourceLocator.findAssetForURI'schemas/resource.json'.getURI或者.getURL,但后来我决定将我的json文件放在src/main/resources中,因为我真的不需要将它作为一个资产来管理,而是作为一个简单的资源来管理。你是对的:我的问题的解决方案应该是assetResourceLocator.findAssetForURI'schemas/resource.json'.getURI或.getURL,但后来我决定将json文件放在src/main/resources中,因为我真的不需要将其作为资产管理,而是作为一个简单的资源管理。