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的」發送。