2016-07-26 3 views
1

У меня есть ниже которого загружает файл с c50c4a23307529b59797525c52b2c50c контента * file1.zipОбъединить несколько ответ на один ответ

Теперь я хочу, чтобы объединить file1Response и file2Response & возвращение как JSON. Любая помощь в том, как это сделать?

@GET 
@Path("/" + getfileschecksum) 
@Produces("application/json") 
public Response getFilesChecksum() { 
     String fileid1 = "file1"; 
     String fileid2 = "file2"; 


     Response file1Response = getChecksum(fileid1); 
     Response file2Response = getChecksum(fileid2); 

     return file1Response; 


    } 

попытался добавить в ArrayList следующим образом:

@GET 
    @Path("/" + getfileschecksum) 
    @Produces("application/json") 
    public Response getFilesChecksum() { 
      String fileid1 = "file1"; 
      String fileid2 = "file2"; 

      ArrayList<Response> rp = new ArrayList<Response>(); 

      Response file1Response = getChecksum(fileid1); 
      Response file2Response = getChecksum(fileid2); 

      rp.add(file1Response); 
      rp.add(file2Response); 
      return Response.ok(rp).build(); 


     } 

возвращается в com.sun.jersey.api.MessageException ошибки: Писатель тела сообщений для класса java.util.ArrayList Java и Java type class java.util.ArrayList и приложение типа MIME media/json не были найдены.

file1Отчет исходит из нижеследующего, может быть изменено ниже, чтобы вернуть строку.

  URL url = new URL(binpath); 
      URLConnection connection = url.openConnection(); 
      InputStream is = connection.getInputStream(); 
      String mt = connection.getContentType(); 
      ResponseBuilder response = Response.ok((Object) is, mt); 
      response.header("Content-Disposition","attachment; filename=" + binpath.substring(binpath.lastIndexOf('/') + 1, binpath.length())); 
      return response.build(); 
+0

Я принимаю Ответ - это объект javax.ws.rs.core.Response. Сначала это не сработает, потому что это интерфейс, и вам придется добавить @JsonTypeInfo к нему, чтобы рассказать сериализатору, как его сериализовать. Вам нужно преобразовать ArrayList в ArrayList и поместить в него фактическое строковое значение, а не объект Response. –

+0

Я попытался file1Response.getEntity(). ToString(), но это возвращает [email protected], а не фактическое содержимое. Как получить строку от ответа? – Newbie

ответ

0

Try:

StringBuffer response = new StringBuffer(); 
response.append(file1Response); 
response.append(file2Response); 

return response.toString(); 

Нет вреда, если он не работает, только пытается помочь. Но если он делает большие пальцы.

+0

Не работает и не возвращает содержимое из файла1Response. – Newbie

0

Я бы порекомендовал вам создать другой метод, который фактически возвращает контрольную сумму строки, а затем вызовет метод ресурсов.

@GET 
@Path("{file}/checksum") 
Response getChecksum(@PathParam("file") final String file) { 
    return Response.ok(calculateChecksum(file)).build(); 
} 


@POST 
@Path("checksums") 
Response getChecksum(final List<String> toChecksum) { 
    final List<String> checksums = new ArrayList<>(); 
    for (String s : toChecksum) { 
     checksums.add(calculateCheckSum(s)); 
    } 
    return Response.ok(checksums).build(); 
} 



private String calculateCheckSum(final String file) { 
    // do your checksum 
} 
+0

URL url = новый URL (binpath); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); Строка mt = connection.getContentType(); ResponseBuilder response = Response.ok ((Object) is, mt); response.header ("Content-Disposition", "attachment; filename =" + binpath.substring (binpath.lastIndexOf ('/') + 1, binpath.length())); return response.build(); это то, что возвращает file1Response, который нужно извлечь в строку. – Newbie

+0

Я полностью неправильно понял вопрос. Вы не можете вернуть двоичный файл как json, это невозможно. Если вы пытаетесь вернуть два файла двоичных файлов по одному запросу, это также будет невозможно, насколько я могу судить. Даже если вы могли бы файл отображаться как один файл и выглядели бы поврежденными. Если вам нужно загрузить файлы mutiple, вам нужно будет их архивировать в один ZIP, tar, rar и т. Д. На стороне сервера перед отправкой одного архивного файла. В вашем случае это похоже на молнию. –

+0

Файл имеет только текстовое содержимое. Возможно ли читать содержимое в java. или есть способ использовать ResponseBuilder для изменения ответа на String из файла. – Newbie

Смежные вопросы