Как я могу передать список помеченных объектов с клиента на сервер, используя Джерси - PullRequest
0 голосов
/ 16 декабря 2011

Я использую джерси, и я хочу отправить (в POST) список объектов на сервер. Это сценарий:

@XmlRootElement
class Myclass{
    //some primitive attributes + empty constructor + getter/setters
}

MyClass как на стороне сервера, так и на стороне клиента.

@XmlRootElement
class MyClasses{
   private List<MyClass> classes = new ArrayList<MyClass>();
   // put some MyClass into the list
}

class Sender{
   MyClasses list = new MyClasses();
   // after client initialization i want to send this list in a POST to server
   WebResource service = client.resource(baseURI());

   //I tried
   service.type("application/xml").accept("application/xml").post(ClientResponse.class,list);
}   

// на стороне сервера @path ( "/ ToSend")

class receiver{

    public Response posted(JAXBElement<MyClasses> vals){
           //work with vals.getValue() as the list of all Objects
    }
} 

К сожалению, у меня есть эта ошибка: ContainerRequest getEntity: читатель тела сообщения для JAXBElement и JAXBElement и MIME-тип приложения / октет-поток не найден.

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Вы уверены, что ваш код выглядит точно так, как написано выше?Исключение предполагает, что вы не устанавливаете тип содержимого запроса.Не используйте JAXBElement и убедитесь, что тип содержимого запроса установлен на application / xml.В вашем фрагменте кода вы, кажется, делаете это.Но исключение говорит о том, что типом медиа является application / octet-stream.Таким образом, либо фрагмент кода не соответствует вашему реальному коду, либо исключение исходит из другого раздела кода, либо у вас есть несколько фильтров, которые изменяют заголовки сообщений до того, как они достигнут метода posted().Аннотируйте метод с помощью @Consumes(MediaType.APPLICATION_XML).

Кстати, вам не нужно использовать класс-оболочку MyClasses.Вы можете просто отправить список, и он тоже будет работать.

0 голосов
/ 16 декабря 2011

Использование MyClasses в качестве типа для значения vals устанавливает тип потребления.

@POST
@Consumes( { MediaType.APPLICATION_XML })
public Response posted(MyClasses vals) {
    // 
    return Response.ok.build();
}
...