Die*_*soa 2 java spring-boot jhipster netflix-zuul spring-rest
我使用 Spring Cloud 和 Zuul 代理作为微服务提供的 RESTful 服务的网关。当我直接向微服务实例执行请求时,所有标头都按我的预期提供。但是,当 Zuul 代理相同的请求时,会删除标头“Content-length”。我对此进行了一些研究,我看到 Zuul 将标题“Transfer-Encoding”添加为“chunked”,在这种情况下,标题内容长度被省略(内容长度正在被剥离,Spring Cloud Netflix:发生了什么在带有 ZuulServlet 的 ZuulConfiguration 中?)。
但是,我确实需要获得我的 RESTful 服务提供的“内容长度”。这个请求也必须由 Zuul 代理(我有很多微服务实例,所以我不会直接访问它们)。
这是我的微服务中的方法:
@RequestMapping(value = "/jobresult/{id}", method = RequestMethod.GET)
@Timed
public ResponseEntity<InputStreamResource> downloadJobResult(@PathVariable Long id) {
Job job = jobService.findOne(id);
File file = new File(job.getTargetFile());
try {
return ResponseEntity.ok().contentLength(file.length()).contentType(MediaType.APPLICATION_OCTET_STREAM).body(new InputStreamResource(new FileInputStream(file)));
} catch (FileNotFoundException e) {
log.error(e.getMessage(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
例如,对/api/jobresult/1的请求正确提供了header“Content-length”,但是对/service/api/jobresult/1(由Zuul路由)的请求没有显示这个header,并且还修改了“Transfer - 编码”到“分块”。
小智 8
来自 Spring Cloud Netflix 代码的 Zuul 响应过滤器导致了这个问题。
解决方案
如果您没有,请在 src/main/resources 中添加 application.properties 文件并添加以下行:
zuul.set-content-length=true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4364 次 |
| 最近记录: |