Ich folgte dieser tutorial zu implementieren Rest API mit Spring Boot zum Herunterladen von Dateien (XML-Format).HTTP 406 Herunterladen einer Datei mit Rest Anruf
Mein Controller-Klasse ist wie folgt:
@RestController
public class RistoreController {
@Autowired
private RistoreService ristoreService;
@RequestMapping(
value = "/ristore/foundation/{trf}",
method = RequestMethod.GET,
produces = "application/xml")
public ResponseEntity<InputStream> getXMLById(@PathVariable("trf") String trf) throws IOException {
InputStream inputStream = ristoreService.findByTRF(trf);
return ResponseEntity
.ok()
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(inputStream);
}
}
Ich habe Service-Schnittstelle RistoreService
autowired in der Steuerung und Bean-Klasse für diesen Dienst wie folgt aussieht:
@Service
public class RistoreServiceBean implements RistoreService {
public InputStream findByTRF(String trf) throws IOException {
String filePath = "/Users/djiao/Box Sync/Work/Projects/RIStore/foundation/foundation_new/" + trf + ".xml";
File file = new File(filePath);
return new FileInputStream(file);
}
}
ich die Anwendung getestet die Verwendung von folgender curl-Befehl:
curl -i -H "Accept: application/xml" http://localhost:8080/ristore/foundation/TRF133672_1455294493597
Allerdings Ich habe 406 Fehler, "nicht akzeptabel". Irgendetwas stimmt nicht mit dem Dateiformat?
Das funktioniert. Ich habe '@PathVariable (" trf ") String trf als Argument für die Methode' downloadXMLFile' hinzugefügt. Ich glaube nicht, 'InputStream' hat' contentLength() 'Methode, wenn Sie' xmlFileInputStream' durch 'xmlFile' meinen. – ddd
Ich habe die Antwort bearbeitet, um die @pathVariable hinzuzufügen, die ich vergessen habe. Aber die Sache hier war hauptsächlich wegen des ResourceInputStream für die Gründe, die ich in der Antwort erklärte. Für die Dateilänge hast du recht. In meinem Fall würde ich eine Datei vom Dienst zurückgeben und dann die Datei im Controller konvertieren. In diesem Fall können Sie die Dateilänge erhalten. Vergessen Sie nicht, die Antwort zu bestätigen. –