Ошибка при отправке списка объектов в службу apache-cxf jax-rs (REST) - PullRequest
2 голосов
/ 01 мая 2011

Я хочу опубликовать список клиентов в формате JSON следующим образом:

@POST
@Path("/addCustomers/")
@Consumes(MediaType.APPLICATION_JSON)
public List<Customer> addCustomers(List<Customer> list){
logger.debug(list);
    return list;
}

Request Header:
Content-Type: application/json

Request Body:
{"Customer":[{"id":2999,"name":"Som Awasthi"},{"id":3000,"name":"Arnav Awasthi"}]}

Response: "415: Unsupported Media Type" error.

Входные данные для этого запроса те же, что я получил в вызове listCustomers, который выглядит следующим образом:

@GET
@Path("/listCustomers")
public List<Customer> listCustomers(){
List<Customer> list = new ArrayList<Customer>();
list.add(new Customer("Som Awasthi", 2999L));
list.add(new Customer("Arnav Awasthi", 3000L));

return list;
}

Так что я ожидал, что входные данные должны дать мне объект List. Но из-за этого возникает ошибка типа неподдерживаемого носителя.

С уважением, Арнав

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Наконец-то я нашел решение в одном обсуждении:

http://cxf.547215.n5.nabble.com/How-to-submit-JSON-data-as-request-body-in-Apache-CXF-jax-rs-REST-td4361669.html

Резюме: Apache-CXF 2.3.0 и Jettison 1.2 не поддерживают это. Поэтому мне пришлось сменить версию на 2.3.4, и она заработала.

Пример приложения: https://bitbucket.org/arnavawasthi/apache-cxf-jaxrs-spring

Надеюсь, что это поможет другим, сталкивающимся с той же проблемой.

Спасибо, Arnav

0 голосов
/ 01 мая 2011

Попробуйте добавить к вашему запросу заголовок Accept:

Accept: application/json

Кроме того, убедитесь, что ваш запрос определенно является POST.

РЕДАКТИРОВАТЬ:

Итак,передаются в это объект с массивом внутри.Попробуйте передать это, в котором массив объектов клиента:

[{"id":2999,"name":"Som Awasthi"},{"id":3000,"name":"Arnav Awasthi"}]
...