Получение статуса HTTP 415, отправка почтового запроса в службу RESTful Джерси

Я отправляю запрос POST, содержащий объект JSON, преобразованный в JSON из моего Knockout, наблюдаемого с помощью метода ko.toJSON. Я отправляю его с помощью Amplify.

Это моя настройка Amplify:

 amplify.request.define('addContract', 'ajax', {
                url: '/api/contractmanager/contracts/create',
                dataType: 'json',
                type: 'POST'
            });

И это метод в моем dataservise для добавления данных:

addContract = function (callbacks, data) {
        return amplify.request({
            resourceId: 'addContract',
            data: data,
            success: callbacks.success,
            error: callbacks.error
        });
    };

Вот как я на самом деле отправляю запрос:

contracts.addData = function (contractModel, callbacks) {

        var contractModelJson = ko.toJSON(contractModel);

        return $.Deferred(function (def) {
            dataservice.contract.addContract({
                success: function (dto) {
                    if (!dto) {
                        logger.error('Error saving!');
                        if (callbacks && callbacks.error) { callbacks.error(); }
                        def.reject();
                        return;
                    }
                                        },
                error: function (response) {
                    logger.error('Error saving!');
                    if (callbacks && callbacks.error) { callbacks.error(); }
                    def.reject(response);
                    return;
                }
            }, contractModelJson);
        }).promise();
    };

В качестве серверной части я использую веб-службу RESTful с Jersey.

Проблема в том, что как только я отправляю запрос, я получаю «HTTP-статус 415 - неподдерживаемый тип носителя», а мой сервер GlassFish сообщает: «Сервер отклонил этот запрос, потому что объект запроса находится в формате, не поддерживаемом запрошенным ресурсом для запрошенный метод (неподдерживаемый тип носителя) ".

Нужно ли мне настраивать что-то конкретное, чтобы это работало? Я что-то упускаю?


person Pejman    schedule 18.03.2013    source источник
comment
Что произойдет, если вы установите тип данных application/json?   -  person condit    schedule 18.03.2013


Ответы (1)


Вам необходимо убедиться, что отправленный тип контента соответствует типу контента аннотации @Consumes на ресурсе Jersey. В вашем конкретном случае ресурс Джерси должен выглядеть примерно так:

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;

...

@PATH("create")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Item create(final Item item) {
  // Create here
}

и вам необходимо убедиться, что ваши данные отправляются с использованием типа контента 'application / json'.

person Community    schedule 19.03.2013