【问题标题】:Getting HTTP Status 415 sending a post request to Jersey RESTful service获取 HTTP 状态 415 向 Jersey RESTful 服务发送发布请求
【发布时间】:2013-03-18 13:11:52
【问题描述】:

我正在发送一个“POST”请求,其中包含一个 JSON 对象,该对象通过 ko.toJSON 方法从我的 Knockout observable 转换为 JSON。我使用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();
    };

对于后端,我使用带有 Jersey 的 RESTful Web 服务。

问题是,一旦我发送请求,我就会收到“HTTP 状态 415 - 不支持的媒体类型”,而我的服务器 GlassFish 说:“服务器拒绝了这个请求,因为请求实体的格式不受请求方法的请求资源(不支持的媒体类型)。”

我需要设置什么特别的东西才能让它工作吗?我错过了什么吗?

【问题讨论】:

  • 如果将数据类型设置为 application/json 会发生什么?

标签: knockout.js jersey http-post amplifyjs http-status-code-415


【解决方案1】:

您需要确保发送的内容类型与 Jersey 资源上的 @Consumes 注释的内容类型相匹配。在您的特定情况下,泽西资源需要看起来像:

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”发送您的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多