【问题标题】:RequestMethod HEAD returns a response bodyRequestMethod HEAD 返回响应正文
【发布时间】:2019-08-21 19:49:44
【问题描述】:

我必须实现 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 且无响应正文

实际:内容长度不为零且响应正文

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    您已表示要同时处理HEADGET 请求:

    @RequestMapping(value = "/version/url.json", method = { RequestMethod.GET, RequestMethod.HEAD })
    

    这意味着您还需要为HEADGET 实现不同的行为。您可以通过注入NativeWebRequest 而不是WebRequest 来获取请求的方法。从NativeWebRequest,您可以检索底层HttpServletRequest,并从那里通过getMethod() 检索请求的方法。当"HEAD".equals(getMethod()) 时,您应该返回一个没有正文的ResponseEntity

    更简单的解决方案是只显式处理GET 请求:

    @RequestMapping(value = "/version/url.json", method =  RequestMethod.GET)
    

    然后,Spring MVC 将通过获取从您的 testUrl 方法返回的响应并忽略正文,为您隐式处理 HEAD 请求。

    【讨论】:

    • 更简单的解决方案是可行的。虽然我必须做一些自定义的事情,所以我觉得有一个单独的 head 方法会更好。因为如果我依靠 Spring 来获取 Get 和 Head 请求,那么在两者上花费的时间将是相同的。我想通过不检索二进制图像来减少。
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多