spring-boot - RequestMethod HEAD 返回响应正文
问题描述
我必须实现 HEAD 方法,如 Spring 3.0 HEAD Requests中所述 。我尝试通过在请求映射中添加 HEAD 并且不在请求映射中添加它。它支持 HEAD 方法的两种方式。
但是内容长度不为零,我也得到了响应正文(图像)。
private static final String GZIPSUFFIX = "-gzip";
@RequestMapping(value = "/version/url.json", method = { RequestMethod.GET, RequestMethod.HEAD })
public ResponseEntity<byte[]> testUrl(@RequestParam(value = "uri") String url,
@RequestParam(value = "size", required = false) String size,
@RequestParam(value = "type", required = false) String type, WebRequest webRequest,
HttpServletResponse response) {
long startTime = 0;
if (LOG.isDebugEnabled()) {
startTime = System.nanoTime();
}
MediaFile mediaFile = retrieve(url, size);
byte[] mediaContent;
ResponseEntity<byte[]> result;
ControllerUtils.addResponseHeaders(response);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(getMediaType(url));
mediaContent = mediaFile.getContent();
result = new ResponseEntity<>(mediaContent, headers, HttpStatus.OK);
}
return result;
}
预期:内容长度为 0 且无响应正文
实际: 内容长度不为零和响应正文
解决方案
您已表示要同时处理HEAD
和GET
请求:
@RequestMapping(value = "/version/url.json", method = { RequestMethod.GET, RequestMethod.HEAD })
这意味着您还需要为HEAD
vs实现不同的行为GET
。您可以通过注入NativeWebRequest
而不是WebRequest
. 您可以从中NativeWebRequest
检索底层HttpServletRequest
,并从那里通过 检索请求的方法getMethod()
。当"HEAD".equals(getMethod())
你应该返回ResponseEntity
没有正文的时候。
一个更简单的解决方案是仅显式处理GET
请求:
@RequestMapping(value = "/version/url.json", method = RequestMethod.GET)
然后,Spring MVC 将HEAD
通过获取从您的testUrl
方法返回的响应并忽略正文来隐式地为您处理请求。
推荐阅读
- java - META-INF/services/abc 中的多个条目:顺序重要吗?
- jquery - 使用 HTML5 数据属性而不是 CSS 类进行同位素过滤
- python - 带有德语字符编码问题的 CSV
- java - 为什么 Hibernate 只为我提供拦截器并且我捕获 JdbcSQLIntegrityConstraintViolationException: NULL not allowed?
- python - pytorch张量转换-张量的张量
- email - Apps 脚本:发送电子邮件 - 脚本每行发送 1 封电子邮件,而不是一封包含所有符合条件的信息的电子邮件
- excel - 如何在 excel 中以千万或缺少的形式格式化数字
- flutter - 从 Scaffold 子项添加 AppBar 操作,例如 Android 中的 Fragment.onCreateOptionsMenu(使用 InheritedWidget)
- django - Django - 能够在本地进行迁移和迁移,但不能在 Heroku 上
- statistics - Clickhouse 每个基表的最大物化视图数量