我使用Spring Boot来实现REST应用程序。我有一个像这样映射的资源
@RequestMapping(value = "/{fromLat}/{fromLon}/{toLat}/{toLon:.+}", method = {RequestMethod.GET},
produces = {"application/json"})
因此路径包含坐标,请求看起来像这样
$ curl -I -X GET http://localhost:8085/foobar/53.481297/9.900539/53.491691/9.946046
不幸的是,最后一端被解释为文件扩展名,这会导致响应标头提供文件下载而不仅仅是普通数据。
Content-Disposition: attachment;filename=f.txt
我认为我可以使用自定义的WebMvcConfigurerAdapter Bean(并且没有@EnableWebMvc)注释处理这种情况,如解释here。
public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
}
但这并不能解决问题。不幸的是,检测到的文件扩展名没有修复 - 因此我无法使用规则来修复扩展程序。
如何将系统配置为只响应内容并且没有Content-Disposition标题(这会导致f.txt下载)?我不想在最后使用斜杠(" /")。
我已经查看了以下资源
答案 0 :(得分:3)
在Spring Framework 4.1.9和4.2.3中,Content-Disposition标题被修复为使用“内联”类型,该类型仅建议文件下载名称,如果内容最终被下载。它不会再强制“另存为”对话框。
另请注意,首先,Content-Disposition标头的原因是为了保护应用程序免受RFD攻击。这是一个非常复杂的问题,但您可以在CVE-2015-5211报告中看到摘要。
答案 1 :(得分:1)
I had similar issues with Spring Boot as described here.
What worked for me is the following configuration:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='menu'>
Menu (Stay hover 1 second HERE)
</div>
<div class='page-overlay'>
page overlay div
</div>
答案 2 :(得分:0)
您是否尝试过设置:
1)Content-Disposition: inline;
- &gt;你可以使用:
返回新的ResponseEntity(body,headers,statusCode);并在标题中设置Content-Disposition。 看这里: How to set 'Content-Disposition' and 'Filename' when using FileSystemResource to force a file download file? 和 Return a stream with Spring MVC's ResponseEntity
2)text/x-json
- application/json
正式注册之前JSON的实验MIME类型。
@RequestMapping(value = "/{fromLat}/{fromLon}/{toLat}/{toLon:.+}", method = {RequestMethod.GET},
produces = {"text/x-json"})
它会尝试显示内容而不是下载内容。
希望它会有所帮助。