Как установить заголовок ответа при реализации загрузки файла через 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