Java REST 서비스에서 Microsoft Excel 파일을 반환해야합니다. 필자는 본질적으로 Apache Wink를 JAX-RS 구현으로 사용하는 WebSphere 8.5를 사용하고 있습니다. 그것은 내가 바꿀 수없는 요구 사항입니다. 나는 또한 자바 7 JDK를 사용하고있다. 여기에 내가 받고있어 오류는 다음과 같습니다Apache Wink를 사용하여 Java REST 서비스를 통해 Excel 문서 반환
handleResponse이 시스템은 javax.ws.rs.ext.MessageBodyWriter 또는 DataSourceProvider 클래스를 찾을 수 없습니다 org.apache.wink.server.internal.handlers.FlushResultHandler com.somewhere.else.message.core.BaseResponseMessage 유형 및 application/vnd.ms-excel mediaType. JAX-RS 응용 프로그램에 의 javax.ws.rs.ext.MessageBodyWriter가 유형 및 미디어 유형으로 지정되어 있는지 확인하십시오.
은 여기 내 자바 리소스 클래스 방법 :
@GET
@Path("/report")
@Produces("application/vnd.ms-excel")
public Response getReport() {
int fileSize = 0;
byte[] reportByteArray = null;
ResponseBuilder responseBuilder = null;
InputStream report = null;
BaseResponseMessage<InputStream> baseResponseMessage = new
BaseResponseMessage<InputStream>();
Path reportPath = null;
String localPath = "C:/Users/me/Report.xls";
responseBuilder = Response.ok(baseResponseMessage);
responseBuilder.header("Content-Description", "File Transfer");
responseBuilder.header("Content-Disposition", "attachment;
filename=Report.xls");
responseBuilder.header("Content-Transfer-Encoding", "binary");
responseBuilder.header("Connection", "Keep-Alive");
reportPath = Paths.get(localPath);
if (Files.exists(reportPath)) {
if (Files.isReadable(reportPath)) {
reportByteArray = Files.readAllBytes(reportPath);
report = new ByteArrayInputStream(reportByteArray);
}
}
fileSize = report.available();
responseBuilder.header("Content-Length", fileSize);
baseResponseMessage.setPayload(report);
return responseBuilder.build();
}
내가 경로와 엑셀 파일이 제대로 발견되는 디버거를보고 알고 않으며, 이는 파일 크기도 제대로 채워집니다.
나는 필요한 정보를 기꺼이 제공 할 것입니다. 시간 내 주셔서 감사합니다!
변경 사항을 적용 할 때이 문제가 발생하지 않았던 것 같습니다 :'org.apache.wink.server.internal.handlers.FlushResultHandler handleResponse com.somewhere.else.message.core.BaseResponseMessage 유형 및 응용 프로그램/옥텟 스트림 mediaType 매개위한 javax.ws.rs.ext.MessageBodyWriter 또는 DataSourceProvider 클래스를 찾을 수 있습니다. JAX-RS 애플리케이션에 javax.ws.rs.ext.MessageBodyWriter가 지정된 유형 및 미디어 유형으로 존재하는지 확인하십시오. 아마도 직접 응답하는 대신 BaseResponseMessage에서 반환되는 응답과 관련이있을 것입니다. – risingTide