我想返回由其他进程生成的@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应用程序中没有例外)...
如何解决?
答案 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浏览器中测试过:
注意:我使用SpringBoot v2.0.5.RELEASE测试了此控制器
干杯!
答案 1 :(得分:1)
我已经使用Spring Boot 1.5.2.RELEASE成功构建了应用程序,它将从任何目录返回静态HTML站点
您可以结帐here