我必须实现HEAD方法,如 Spring 3.0 HEAD Requests 我已经尝试通过在请求映射中添加HEAD以及不在请求映射中添加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,没有响应正文
实际:内容长度不为零,且为响应正文
答案 0 :(得分:0)
您已表示要同时处理HEAD
和GET
请求:
@RequestMapping(value = "/version/url.json", method = { RequestMethod.GET, RequestMethod.HEAD })
这意味着您还需要为HEAD
和GET
实现不同的行为。您可以通过注入NativeWebRequest
而不是WebRequest
来获得请求的方法。您可以从NativeWebRequest
检索基础HttpServletRequest
,然后通过getMethod()
从那里获取请求的方法。当"HEAD".equals(getMethod())
时,您应该返回没有正文的ResponseEntity
。
一个更简单的解决方案是仅显式处理GET
请求:
@RequestMapping(value = "/version/url.json", method = RequestMethod.GET)
然后,Spring MVC将通过获取HEAD
方法返回的响应并忽略主体来隐式处理testUrl
对您的请求。