1

HTTP状态415我送含JSON对象“POST”请求经由ko.toJSON方法从我Knockout观察到转化成JSON。我发送它使用Amplify获取发送POST请求泽西RESTful服务

这是我的扩增出设置:

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(); 
    }; 

对于后端,我使用的REST风格的Web服务为Jersey

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

我是否需要设定任何特定的这个工作?我错过了什么吗?

+1

如果将数据类型设置为“application/json”,会发生什么情况? – condit 2013-03-18 14:16:34

回答

1

您需要确保发送的内容类型@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 
} 

,你需要确保你的数据使用内容类型“应用/ JSON的”发送。