如何在弹簧支架控制器中动态设置产值?

时间:2018-04-09 18:37:24

标签: spring spring-mvc spring-restcontroller

我需要实现可以发送响应或下载文件的API:

@GetMapping(value = "/download")
public ResponseEntity<?> downloadFile(
        @RequestParam(value = "apiResponseType", required = true) String apiResponseType) throws IOException {
    ValidationResponse response = null;
    if (apiResponseType.equals("FILE")) {
        String FILE_HEADER = "id,firstName,lastName,gender,age";        
        byte[] json = FILE_HEADER.getBytes();
        Resource resource = new ByteArrayResource(json);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentLength(resource.contentLength());
        headers.setContentDispositionFormData("attachment", "test.csv");
        return ResponseEntity.ok().headers(headers).contentType(MediaType.APPLICATION_OCTET_STREAM).body(resource);
    } else {
        response = new ValidationResponse();
        response.setSuccess(true);
        response.setMessage("TESTING");
        return ResponseEntity.ok(response);
    }
}

以上代码适用于“ELSE”案例。即,能够发送响应。 但是,如果我将“生成”添加到@GetMapping,如下所示,我可以下载文件但不能用于响应(在上面的代码中也是如此)(获得状态:406不可接受):

@GetMapping(value = "/downloadFile", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:0)

您的问题有无效的假设,可以发送回复或下载文件&#39;。下载文件是发送响应的其他内容!对于API客户端来说没有区别。对于浏览器,如果浏览器建议将响应保存为文件或在浏览器窗口中显示响应,则只是实现细节。

答案 1 :(得分:0)

您是否在return ResponseEntity.ok(response).contentType(MediaType.TEXT_PLAIN);分支上尝试了else(并移除了produces)?