REST - Как передать массив long в параметре с Джерси? - PullRequest
4 голосов
/ 02 февраля 2011

Я пытаюсь передать массив long с Джерси:

На стороне клиента я пытаюсь что-то подобное:

@GET
@Consume("text/plain")
@Produces("application/xml)
Response getAllAgentsById(@params("listOfId") List<Long> listOfId);

Есть ли способ реализовать что-то подобное?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Если вы хотите придерживаться формата «application / xml» и избегать формата JSON, вам следует обернуть эти данные в аннотированный объект JAXB, чтобы Джерси мог использовать встроенный MessageBodyWriter / MessageBodyReader .

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public ListOfIds{

 private List<Long> ids;

 public ListOfIds() {}

 public ListOfIds(List<Long> ids) {
  this.ids= ids;
 }

 public List<Long> getIds() {
  return ids; 
 }

}

На стороне клиента (с использованием клиента Джерси)

// get your list of Long
List<Long> list = computeListOfIds();

// wrap it in your object
ListOfIds idList = new ListOfIds(list);

Builder builder = webResource.path("/agentsIds/").type("application/xml").accept("application/xml");
ClientResponse response = builder.post(ClientResponse.class, idList);
0 голосов
/ 02 февраля 2011

Если вам просто нужно передать массив long, его можно без проблем.Но я, вероятно, передам длинную строку, разделенную запятой.(123,233,2344,232), а затем разбить строку и преобразовать в long.

Если нет, я предлагаю вам использовать сериализацию Json.Если вы используете Java-клиент, то Google GSON является хорошим вариантом.На стороне клиента я закодирую свой список:

  List<Long> test = new ArrayList<Long>();
            for (long i = 0; i < 10; i++) {
             test.add(i);
            }

  String s = new Gson().toJson(test);

и передам эту строку как post-param.На стороне сервера я буду декодировать вот так.

 Type collectionType = new TypeToken<List<Long>>() {
        } // end new
                .getType();
        List<Long> longList = new Gson().fromJson(longString,
                collectionType);
...