我有一个rest api,它使我可以将多个IDS传递到资源,以从特定表下载记录并将其压缩。 MSSQL是后端控制消息。
因此,当将ID作为参数传递时,它将调用数据库表以返回消息数据。下面是代码:
@GetMapping("message/{ids}")
public void downloadmessage(@PathVariable Long[] ids, HttpServletResponse response) throws Exception {
List<MultiplemessageID> multiplemessageID = auditRepository.findbyId(ids);
String xml = new ObjectMapper().writeValueAsString(MultiplemessageID);
String fileName = "message.zip";
String xml_name = "message.xml";
byte[] data = xml.getBytes();
byte[] bytes;
try (ByteOutputStream bout = new ByteOutputStream(); ZipOutputStream zout = new ZipOutputStream(bout)) {
for (Long id : ids) {
zout.setLevel(1);
ZipEntry ze = new ZipEntry(xml_name);
ze.setSize(data.length);
ze.setTime(System.currentTimeMillis());
zout.putNextEntry(ze);
zout.write(data);
zout.closeEntry();
}
bytes = bout.getBytes();
}
response.setContentType("application/zip");
response.setContentLength(bytes.length);
response.setHeader("Content-Disposition", "attachment; " + String.format("filename=" + fileName));
ServletOutputStream outputStream = response.getOutputStream();
FileCopyUtils.copy(bytes, outputStream);
outputStream.close();
}
数据库上的消息具有以下结构:
MSG_ID C_ID NAME INSERT_TIMESTAMP MSG CONF F_NAME POS ID INB HEADERS
0011d540 EDW,WSO2,AS400 invoicetoedw 2019-08-29 23:59:13 <invoice>100923084207</invoice> [iden1:SMTP, iden2:SAP, service:invoicetoedw, clients:EDW,WSO2,AS400, file.path:/c:/nfs/store/invoicetoedw/output, rqst.message.format:XML,] p3_pfi_1 Pre 101 MES_P3_IN [clients:EDW,WSO2,AS400, UniqueName:Domain]
我的文件名应类似于:标头名+ _input parameterId [0]的一部分 即Domain_1
多个参数(1,2,3,4)的文件名将类似于 域_1 域_2 Domain_3 Domain_4 下面的代码从标题中检索文件名的一部分作为字符串。
private static String serviceNameHeadersToMap(String headers) {
String sHeaders = headers.replace("[", "");
sHeaders = sHeaders.replace("]", "");
String res = Arrays.stream(sHeaders.split(", "))
.filter(s->s.contains("serviceNameIdentifier"))
.findFirst()
.map(name->name.split(":")[1])
.orElse("Not Present");
return res;
我需要创建一个带有标题和输入参数的文件名。设置好文件名后,我希望使用正确的文件名下载并压缩单个记录。
压缩文件名为message.zip。解压缩后,它应包含Domain_1.xml,Domain_2.xml,Domain_3.xml,Domain_4.xml等单个文件。
我该如何实现?请指教。我需要一些关于Java有限知识的指导。谢谢。