Я пытаюсь разработать некоторые службы отдыха с Джерси для загрузки и скачивания файлов (что-то вроде файлового менеджера). Если мои сервисы производят / используют только класс File в качестве «application / octet-stream», как в приведенном ниже коде, они работают.
@GET
@Produces("application/octet-stream")
public File getFile(String id) {
try {
File file = new File(System.getProperty("user.home"), id);
return file;
} catch (FileNotFoundException ex) {
Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
Но если я пытаюсь передать пользовательский объект, который содержит поле File и некоторые другие данные (FileEnvelope в образце), я получаю сообщение об ошибке.
@GET
@Produces("application/octet-stream")
public FileEnvelope getXml(String id) {
try {
File file = new File(System.getProperty("user.home"), id);
FileEnvelope fileEnvelope = new FileEnvelope(file, "text");
return fileEnvelope;
} catch (FileNotFoundException ex) {
Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
Ошибка
Вызывается: com.sun.jersey.api.MessageException: средство записи тела сообщения для класса Java com.mycompany.restdemo.FileEnvelope и класса Java-типа com.mycompany.restdemo.FileEnvelope и типа мультимедиа application / octet поток не был найден
Где я не прав? Это правильный способ справиться с этим делом? Мой клиент не мог быть "клиентом Джерси".