2016-08-22 4 views
3

Ich mag einen Controller erstellen, die an dem Client eine CSV-Datei gesendet werden, und ich geschaffen, um den nächsten Controller:Encoding für heruntergeladene Dateien im Frühjahr

@ResponseStatus(value = HttpStatus.OK) 
@RequestMapping(value = "/csv", method = RequestMethod.GET) 
public ResponseEntity downloadCsvAllInvoiceTransactionsByFilter(
     @PageableDefault(direction = DESC, sort = "invoiceDate", size = 30) Pageable pageRequest) throws IOException { 
    String someVariable = "Some text"; 
    byte[] out = someVariable.getBytes(Charset.forName("UTF-8")); 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    LOGGER.info(new String(out)); 
    responseHeaders.add("content-disposition", "attachment; filename=transactions.csv"); 
    responseHeaders.add("Content-Type","text/csv; charset=utf-8"); 
    return new ResponseEntity<>(out,responseHeaders,HttpStatus.OK); 
} 

Logger ist die richtige Zeichenfolge anzeigt:

Einige Text

aber in heruntergeladenen Datei gibt es eine andere

U29tZSB0ZXh0

Wie kann ich dieses Problem beheben?

Antwort

1

Body von ResponseEntity geht durch einen Nachrichtenkonverter, bevor es gesendet wird. Die Wahl des jeweiligen Konverters hängt von der Klasse des Hauptteils und den Antwort- und Anfrageköpfen ab.

Ich habe versucht, das Problem mit Ihrem Code-Snippet zu reproduzieren und erwarteten Text in CSV-Datei. Also nehme ich an, dass Sie einen Nachrichtenkonverter registriert haben, der Byte-Arrays so konvertiert, wie Sie es beobachten.

Sie können AbstractMessageConverterMethodProcessor#writeWithMessageConverters debuggen und sehen, welcher Konverter gewählt wird und warum.

Verwandte Themen