MessageBodyWriter не найден
Я пытаюсь заставить StreamResponseBody работать с образцами жестко запрограммированных данных.
@POST
@Path("filetypecsv")
@Produces("text/plain")
public ResponseEntity<StreamingResponseBody> studentsFile() {
String name = "name";
String rollNo = "rollNo";
StreamingResponseBody stream = output -> {
Writer writer = new BufferedWriter(new OutputStreamWriter(output));
writer.write("name,rollNo"+"\n");
for (int i = 1; i <= 1000; i++) {
writer.write(name + i + " ," + rollNo + i + "\n");
writer.flush();
}
};
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=students.csv")
.contentType(org.springframework.http.MediaType.TEXT_PLAIN)
.body(stream);
}
Я всегда получаю эту ошибку:
SEVERE: MessageBodyWriter not found for media type=text/plain, type=class org.springframwork.http.ResponseEntity, genericType=org.springframework.http.ReponseEntity<StreamingResponseBody>.
Я добавил зависимость: jersey-media-json-jackson.
Но я все еще получаю эту ошибку, пожалуйста, сообщите.
1 ответ
Это решение применимо, если ваш код использует Jax.rs.core, а не Spring @RestController. Я не видел решения, в котором вы могли бы использовать Springs StreamingResponseBody вместе с jax.rs. Вместо этого вы можете использовать jax.rs StreamingOutput. Вы можете вернуть ответ jax.rs и (MediaType.TEXT_PLAIN) или эквивалентный поток октетов.
Пожалуйста, смотрите эту ссылку - https://dzone.com/articles/jax-rs-streaming-response
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream os) throws IOException, WebApplicationException {
Writer writer = new BufferedWriter(new OutputStreamWriter(os));
for (org.neo4j.graphdb.Path path : paths) {
writer.write(path.toString() + "\n");
}
writer.flush();
}
};
return Response.ok(stream).build();