In questi giorni mi sono trovato a dover gestire il contenuto di servizio rest che a seguito di una chiamata GET restituiva un content di tipo multipart-mixed. Nel progetto precedente usavo jersey che gestiva in mod del tutto trasparente questo tipo di chiamata, in questo progetto avevo una dipendenza da Spring ed ero vincolato ad usare la classe RestTemplate, peccato che per questa template la lettura di questo tipo di contenuto non fosse così agevole.
Per risolvere ho letto la risposta come byte[] e poi ho usato la classe org.apache.commons.fileupload.MultipartStream presente nel in Commons FileUpload per leggere il contenuto da un byte[], scartare gli header e leggere solo il file di mio interesse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
RestTemplate restTemplate = new RestTemplate(); byte[] bytes = restTemplate.getForObject(fileUlr, byte[].class); String txt = new String(bytes); String boundary = StringUtils.substringBefore(txt, "\r\n").substring(2); MultipartStream multipartStream = new MultipartStream(new ByteArrayInputStream(bytes), boundary.getBytes(), 1024, null); boolean nextPart = multipartStream.skipPreamble(); while (nextPart) { multipartStream.readHeaders(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); multipartStream.readBodyData(bos); return bos.toByteArray(); } return bytes; |