2016-07-14 7 views
0

小さなwebappを作ったので、インデックスページの一番下にクレジットノートを追加したいと思います。 WARファイルのhtmlページからノートを削除するのは簡単です。Spring Bootで静的リソースindex.htmlを変更するには?

public class MainPageTransformer implements ResourceTransformer { 
    @Override 
    public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain) throws IOException { 
     String html = IOUtils.toString(resource.getInputStream(), UTF_8); 
     html = html.replace("</body>", "<div style=\"position: absolute; bottom: 5px;\">Autor</div>\n</body>"); 
     return new ByteArrayResource(html.getBytes()); 
    } 
} 

...と::だから私は 'index.htmlを' 私はリソースを変更でき、このように考え

@Configuration 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/client/index.html") 
       .addResourceLocations("classpath:/static/client") 
       .resourceChain(false) 
       .addTransformer(new MainPageTransformer()); 
    } 
} 

MainPageTransformer.transformメソッドが実行された後、それが例外をスロー:

java.io.FileNotFoundException: Byte array resource [resource loaded from byte array] cannot be resolved to absolute file path 
at org.springframework.core.io.AbstractResource.getFile(AbstractResource.java:114) 
at org.springframework.core.io.AbstractResource.getFileForLastModifiedCheck(AbstractResource.java:169) 
at org.springframework.core.io.AbstractResource.lastModified(AbstractResource.java:153) 
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:240) 
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 

どうすればいいですか?私の目標を達成する良い方法はありますか?どうもありがとう!

答えて

1

今日この問題に遭遇しましたが、org.springframework.web.servlet.resource.TransformedResourceを試してみてください。

public class MainPageTransformer implements ResourceTransformer { 
@Override 
public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain) throws IOException { 
    String html = IOUtils.toString(resource.getInputStream(), UTF_8); 
    html = html.replace("</body>", "<div style=\"position: absolute; bottom: 5px;\">Autor</div>\n</body>"); 
    return new TransformedResource(resource, html.getBytes()); 
    } 
} 
+0

驚くべきことに、これはハハを見つけるのに驚異的でした。私はそれが特に一般的なユースケースではないと思います。共有ありがとう! – misaka

関連する問題