发送REST帖子上的文件列表

时间:2013-11-07 07:45:25

标签: java rest tomcat jersey

我正在使用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

1 个答案:

答案 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