Как установить заголовок ответа при реализации загрузки файла через RestController?

public interface IndexApi {
    @ApiOperation(value = "Download excel.", response = byte[].class)
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "The excel file", response = byte[].class),
            @ApiResponse(code = 500, message = "Unexpected error", response = String.class)})
    @GetMapping(
            value = "/api/download",
            produces = {"application/vnd.ms-excel"})
    byte[] download();
}

@RestController
public class TestController implements Api {
        @Override
        public byte[] download() {
            response.setHeader("Content-Disposition", "attachment; filename=\"somefile.xls\"");
            return service.download(symbol);
        }
    }  

Когда я это реализовал, он прекрасно загрузит файл, но имя файла будет загружено. Как я могу установить заголовок, чтобы я мог настроить имя файла?

2 ответа

Решение
@Override
@ApiOperation(
        value = "Download file.",            
        response = byte[].class)
@ApiResponses(value = {
        @ApiResponse(code = 200, message = "File download.", response = byte[].class),
        @ApiResponse(code = 500, message = "Unexpected error", response = String.class)})
@GetMapping(
        value = "/file/{exDate}/download",
        produces = {"application/vnd.ms-excel"})
public byte[] download(@ApiParam(value = "Valid date.", required = true) @PathVariable(value = "exDate") String exDate, HttpServletResponse response) {
    response.setHeader("Content-disposition", "attachment; filename=" + String.format(FILE_NAME_TEMPLATE, dateArg[0],dateArg[1],dateArg[2]));
    return service.download(exDate);
}

Пришлось установить produces параметр для application/vnd.ms-excel,

Вы можете вернуть ResponseEntityобъект с набором заголовков и передать поток файла в ResponseEntity

Другие вопросы по тегам