我的要求是我应该使用RESTFul服务显示文件。我在这里如何进行:
服务器:
@GET
@Path("/{name}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile {
...
return Response.ok(inputStream).header("Content-Disposition", "attachment; filename=" + fileName).build();
客户端:
final WebTarget target = createRestClient("path/" + fileName, new HashMap<String, Object>());
return target.request(MediaType.APPLICATION_OCTET_STREAM).get().readEntity(Part.class);
当我运行它时,我发现了这个错误:
MessageBodyReader not found for media type=application/octet-stream, type=interface javax.servlet.http.Part, genericType=interface javax.servlet.http.Part.
你知道这是从哪里来的吗?
感谢。
答案 0 :(得分:1)
javax.servlet.http.Part
应该用于获取上传多部分数据,并由servlet容器创建,您可以从HttpServletRequest
获取。它不应该以这种方式使用。除了数据之外,甚至不是多部分。
相反,您只需从InputStream
中获取Response
,从标头中明确获取Content-Dispostion
即可。像
Response response = target.request()
.accept(MediaType.APPLICATION_OCTET_STREAM)
.get();
// get InputStream
InputStream is = response.readEntity(InputStream.class);
// get Content-Disposition header
String contentDisposition = (String)response
.getHeaderString(HttpHeaders.CONTENT_DISPOSITION);
// get filename
contentDisposition = contentDisposition
.substring(contentDisposition.indexOf("filename=") + "filename".length() + 1);
System.out.println(contentDisposition);