Я новичок в Java, и я создаю ресурс REST API для весенней загрузки, чтобы загрузить заархивированный файл на основе переданного списка идентификаторов. Заархивированный файл должен содержать идентификационные записи из базы данных. База данных Mysql имеет несколько записей с уникальными идентификаторами. Поэтому ресурс, который я создаю, должен возвращать zip-файл с различными идентификаторами, переданными в качестве параметра.
Например:
Таблица базы данных «Сообщение»:
ID | детали сообщения | метка времени| payload | config
1 | Тестовое сообщение | 2019-08-28 16: 00: 25.0003470 |Это тестовая полезная нагрузка | subscriber1: test, subscriber2: test1
2 | Test Message1 | 2019-08-20 12: 46: 40.0007520 |Это тест payload1 | subscriber001: test, subscriber002: test1
Если я передаю только 1 в качестве идентификатора, он должен загружать файл только на локальную машину, а не в zip.
Если я передаю 1и 2 в качестве параметра в URL, он должен возвращать zip-файл с обеими записями.
В настоящее время я создал ресурс, который будет загружать все записи из БД в мой локальный. Я не могу понять, как заставить его загружаться при передаче одного идентификатора и ZIP при передаче нескольких идентификаторов.
Вот фрагмент кода:
Любая помощь будет принята с благодарностью. Спасибо
@GetMapping("/file/save")
@CrossOrigin(origins = "*")
public ResponseEntity<byte[]> download() throws Exception {
List<messageEntity> messageRecord = messageRepository.findAll();
ObjectMapper objectMapper = new ObjectMapper();
String xml = objectMapper.writeValueAsString(messageRecord);
byte[] stringtobytes= xml.getBytes();
String fileName = "file.xml";
HttpHeaders respHeaders = new HttpHeaders();
respHeaders.setContentLength(stringtobytes.length);
respHeaders.setContentType(MediaType.TEXT_XML);
respHeaders.setCacheControl("must-revalidate, post-check=0, pre-check=0");
respHeaders.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);
return new ResponseEntity<byte[]>(stringtobytes, respHeaders, HttpStatus.OK);
}