我正在使用Jersey 1.17开发REST-Webservice。我有两个服务器在两个Tomcats-AppServer上运行。第一个Tomcat第二个发送一些数据。这将获取此数据并在其系统中提取一些文件。现在我的问题是可以将多个文件发送回第一个Tomcat服务器。有一个文件,我把它带到工作:
Tomcat 1
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/...");
ObjectMapper objektMapper = new ObjectMapper();
String input = null;
try {
input = objektMapper.writeValueAsString(jsonMappingWebservice);//some JSON-Values
} catch (JsonProcessingException e) {
e.printStackTrace();
}
ClientResponse response = webResource
.type("application/json")
.post(ClientResponse.class, input);
// this is what I want to
List<File> file = (List<File>) response.getEntity(File.class);have
String sCurrentLine;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file.get(1).getAbsolutePath()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
Tomcat 2
@POST
@Path("/generate")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response erstelleBericht(JsonMappingWebservice jsonMappingWebservice) {
List<String> dateiPfade = Steuerung.erstelleExportDateien(jsonMappingWebservice);
List<File> files = new ArrayList<>();
for (String pfad : dateiPfade) {
files.add(new File(pfad));
}
return Response.ok(files, MediaType.APPLICATION_OCTET_STREAM).build();
}
错误
A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/octet-stream was not found
答案 0 :(得分:0)
错误代表球衣的无效性,以便通过电线序列化列表。实际上,您的资源方法会生成一个代表列表文件的八位字节流,因此您需要一个自定义 MessageBodyWriter 来转换您的文件列表到octect流和自定义 MessageBodyReader 将octect流转换回文件列表
为了以二进制格式表示文件列表,我认为您可以将每个文件转换为BASE64,然后将它们全部放在一个流中,将每个文件BASE64表示与下一个文件分开,带有某种边界
类似的东西:
[File BASE 64]
- 边界 -
[File BASE 64]
- 边界 -
[File BASE 64]
使用此List到二进制格式转换器,您必须创建一个 MessageBodyWriter ,它将通过网络发送数据
在接收方,你必须进行反向操作,从二进制数据中获取一个List。您将此逻辑放入 MessageBodyReader
为了构建 MessabeBodyWriter 和 MessageBodyReader ,请查看this answer