0

我正在使用 Jersey 1.17 开发 REST-Webservice。我有两台服务器在两个 Tomcats-AppServer 上运行。第一个 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);
}

雄猫 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
4

1 回答 1

0

该错误代表 jersey 无法通过网络对 List 进行序列化。实际上,您的资源方法会生成一个表示文件列表的八位字节流,因此您需要一个自定义MessageBodyWriter将您的文件列表转换为八位字节流,并需要一个自定义MessageBodyReader将八位字节流转换回文件列表

为了以二进制格式表示文件列表,我认为您可以将每个文件转换为 BASE64,然后将它们全部放在一个流中,用某种边界将每个文件 BASE64 表示与下一个文件分开

就像是:

[文件基础 64]

- 边界 -

[文件基础 64]

-- 边界--

[文件基础 64]

使用此列表到二进制格式的转换器,您必须创建一个MessageBodyWriter,它将通过网络发送数据

在接收方,你必须做相反的操作,从二进制数据中获取一个列表。您可以将此逻辑放入MessageBodyReader

为了构建MessabeBodyWriterMessageBodyReader看看这个答案

于 2013-11-15T06:34:12.153 回答