Java + Jersey список объектов на входе веб-сервиса - PullRequest
0 голосов
/ 04 марта 2012

Мне нужно получить список сущностей JSON в качестве входных данных для моего WS.

Здесь мое определение сущности:

@XmlRootElement
public class ContactClass {
    public String action;
    public Long userId;
    public String phone;
    public String fbId;
}

Здесь мое определение функции WS:

@PUT
@Path("/{userId}/adBook")
public String synchAdBookContacts(@PathParam("userId") Long userId, ArrayList<ContactClass> contacts)

Удаление ArrayList <> Работает нормально, но мне нужен массив ContactClass в качестве входных данных.

Не могли бы вы мне помочь, пожалуйста?

Спасибо!

Обновление: Наконец-то я нашел решение, вот статья, которая решила мою проблему: https://blogs.oracle.com/japod/entry/missing_brackets_at_json_one

Ответы [ 3 ]

1 голос
/ 13 августа 2012

Bean 1:

@XmlRootElement
public class Contact {
   private String name;
   private String phoneNumber;


// Getters, setters, default constructor
}

Bean 2:

@XmlRootElement
public class Contacts {
   private List<Contact> contacts;

   //Getter for contacts
   @XMLElement(name = "listContacts")
   public List<Contact> getContacts() {
....


// Getters, setters, default constructor
}

Ваш файл Json должен иметь следующий формат:

"listContacts":[{"json for contact1"},{"json for contact2"},{"json for contact3"}...]

Ваш ресурс:

@PUT
@Path("/{userId}/adBook")
public String synchAdBookContacts(@PathParam("userId") Long userId, Contacts contacts) {
//Here you can get your contacts contacts.
0 голосов
/ 06 марта 2012

Аннотирование вашего метода synchAdBookContacts с помощью @Consumes ("application / json") должно сделать это. Какую реализацию JAX-RS вы используете и какую именно ошибку вы получаете?

0 голосов
/ 04 марта 2012

Десериализация в список должна работать просто отлично.Следующий код работает с RESTeasy + Jackson:

Bean:

@XmlRootElement
public class Contact implements Serializable {
   private static final long serialVersionUID = 2075967128376374506L;

   private String name;
   private String phoneNumber;

   // Getters, setters, default constructor
}

Ресурс:

@Path("/othertest")
public class AnotherTestResource {

   @POST
   @Path("/list/{id}")
   @Produces("application/json")
   @Consumes("application/json")
   public Response requestWithList(@PathParam("id") String id,
         List<Contact> contacts) {
      return Response.ok("Hello World: " + contacts.size()).build();
   }
}
...