Spring Controller从任何目录返回静态HTML站点

时间:2019-02-22 15:24:07

标签: spring

我想返回由其他进程生成的@Controller静态HTML网站。假设生成的.html文件位于/tmp/generated中。我正在尝试读取文件并将其内容传递给ResponseEntity:

@GetMapping(value = "test")
ResponseEntity<String> test(@RequestParam("filename") String filename) throws IOException {
    String content = new String(Files.readAllBytes(Paths.get("/tmp/generated/" + filename)), "UTF-8");

    final HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.TEXT_HTML);
    return new ResponseEntity<String>(content, headers, HttpStatus.OK);
}

但是当我在浏览器中打开url时,我得到了编码错误的html内容(声明并以'“'结尾):

"\u003chtml\u003e\n\u003chead\u003e\n \u003cmeta charset\u003d\"utf-8\" /\u003e\n \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dedge\" /\u003e\n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width, initial-scale\u003d1\" /\u003e [.....]

如果我在produces = MediaType.TEXT_HTML_VALUE批注中添加@GetMapping,则会收到406 Not Acceptable错误响应(但我的spring应用程序中没有例外)...

如何解决?

2 个答案:

答案 0 :(得分:1)

我不确定为什么在映射中使用农产品时为什么会遇到问题。

我快速尝试了一下,对我有用。

@GetMapping(value = "test", produces=MediaType.TEXT_HTML_VALUE)
public ResponseEntity<String> test(@RequestParam("filename") String filename) throws IOException {
    String content = new String(Files.readAllBytes(Paths.get("/tmp/generated/" + filename)), "UTF-8");
    return new ResponseEntity<String>(content, HttpStatus.OK);
}

在Chrome浏览器中测试过:

enter image description here

文件 enter image description here

注意:我使用SpringBoot v2.0.5.RELEASE测试了此控制器

干杯!

答案 1 :(得分:1)

我已经使用Spring Boot 1.5.2.RELEASE成功构建了应用程序,它将从任何目录返回静态HTML站点

您可以结帐here