2014-06-12 44 views
6

我已經使用JAX-RS(Jersey 2.0)實現了一個小的REST API,並且我正在使用AJAX調用API,GET和POST工作正常,但是當我得到調用任何PUT和DELETE方法,我得到的是以下錯誤消息:403使用AJAX進行PUT和DELETE時的狀態(禁止)

無法加載資源:服務器與403(禁止)

這裏狀態迴應是一個的例子DELETE用Java編寫的方法:

@Path("/deleteSomething") 
    @DELETE 
    @Consumes("application/json") 
    public void delete(String json) throws ParseException { 
     JSONParser parser = new JSONParser(); 
     Object obj = parser.parse(json); 
     JSONObject object=(JSONObject)obj; 

     String id = (String) object.get("id"); 
     System.out.println("ID : " + id); 
     //DO SOMETHING HERE 
    } 

這裏是JavaScript調用使用AJAX:

function deleteSomethingAjax() { 
    $.ajax({ 
     url: API_URI + "/deleteSomething", //API_URI is the API's uri 
     contentType : 'application/json', 
     data: idToJSON(), // this function just returns a JSON obj {"id":"myID"} 
     type: 'DELETE', 
     success : function(data, textStatus, jqXHR) { 
      alert("Fine!"); 
     }, 

     error : function(jqXHR, data, textStatus, errorThrown) { 
      alert('WOOPS, something wrent wrong...'); 
     } 
    }); 
} 

任何幫助將非常感激!謝謝!!

+1

相反編輯問題,包括您的解決方案,倒不如簡單地發佈一個答案(和「接受」)。 –

+1

@PaulRichter謝謝你的建議,這就是我剛纔所做的。 – charliebrownie

+1

@AntP感謝您的建議!我剛剛發佈了下面的解決方案並接受了它。 – charliebrownie

回答

6

該問題與CORSFilter設置有關,我在web.xml文件中設置了錯誤。這裏是CORSFilter的部分,以及設置內部web.xml中

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
     <param-name>cors.allowed.origins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowed.methods</param-name> 
     <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>