【发布时间】:2017-01-05 09:43:21
【问题描述】:
我是网络服务的新手。由于要求,我必须通过 REST Web 服务向服务器发送一个文件[很可能是 txt 格式]。
我遇到了如下异常。
找不到媒体类型=application/json、类型=类 gvjava.org.json.JSONObject、genericType=类 gvjava.org.json.JSONObject 的 MessageBodyWriter。
这是我的网络服务方法。
@Path("{c}")
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String convert(@PathParam("c") JSONObject object) throws JSONException {
String result = "";
return "<ctofservice>" + "<ctofoutput>" + result + "</ctofoutput>" + "</ctofservice>";
}
现在客户端代码如下所示
JSONObject data_file = new JSONObject();
data_file.put("file_name", uploadFile.getName());
data_file.put("description", "Something about my file....");
data_file.put("file", uploadFile);
Client client = ClientBuilder.newClient();
webTarget = client.target(uploadURL).path("ctofservice").path("convert");
Response value = webTarget.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(data_file,MediaType.APPLICATION_JSON_TYPE),
Response.class);
请帮我解决这个问题。 提前致谢。
------------------------------------------ ----------------------------------------
正如 peeskillet 在下面的答案中所建议的,我尝试通过多部分发送文件。我仍然面临找不到八位字节流的异常。
下面是我的rest api
@Path("{c}")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response convert(@FormDataParam("file") FormDataContentDisposition file) {
String result = "";
Some operation with attached parameter ...
return Response.status(200).entity(result).build();
}
这是我的测试客户端
FormDataMultiPart multiPart = new FormDataMultiPart();
multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);
FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file",
uploadFile,MediaType.APPLICATION_OCTET_STREAM_TYPE);
multiPart.bodyPart(fileDataBodyPart);
Client client = Client.create();
WebResource webResource = client
.resource(uploadURL).path("ctofservice");
ClientResponse response = webResource.accept("application/json")
.post(ClientResponse.class,multiPart);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
我在下面遇到异常
我不明白为什么需要以 MediaType.APPLICATION_OCTET_STREAM_TYPE 的形式发送数据?因为我之前使用 multipart 作为媒体类型...
感谢您的帮助..
【问题讨论】:
-
如果你只是想上传一个文本文件,那么最好将文件作为二进制流(Multipart)发送。它将使您免于处理文本文件编码。