2015-01-11 32 views
4

我是其他服務的新手。我正在嘗試創建一個接受來自客戶端的json字符串的服務。我在使用JQuery調用此服務時遇到了405錯誤。下面是ws的Java代碼:爲什麼我在執行POST請求時收不到405方法

這是我向JERSEY POST RESTFUL Webservice發佈請求的方式。

var orderinfo = {'ordersplitjson': ordersplitjson, 'customer_id': cust_id , 'homedelivery': homedelivery, 'seatnum' :seatnum , 'locationname':location_nam , 'rownum':rownum}; 
var json_data = JSON.stringify(orderinfo); 
     var ajaxcallquery = $.ajax({ 
      type:'POST', 
       dataType: 'jsonp', 
      data: json_data, 
      contentType: "application/json; charset=utf-8", 
      url:url+'/OMS/oms1/orderinsertservice', 
      jsonpCallback:'jsonCallback', 
      jsonp:false, 
      success: function(response) 
      { 
      }, 
      error: function(jqxhr, status, errorMsg) { 
      alert('Failed! ' + errorMsg); 
     } 

     }); 


public class OrdersInsertService 
{ 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces("application/json") 
    public String getData(OrderInfo order,@Context HttpServletResponse serverResponse) 
    throws JSONException 
      { 
     serverResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
      serverResponse.addHeader("Access-Control-Allow-Credentials", "true"); 
      serverResponse.addHeader("Access-Control-Allow-Origin", "*"); 
      serverResponse.addHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With"); 
      serverResponse.addHeader("Access-Control-Max-Age", "60"); 

} 
} 


package com.util; 

public class OrderInfo { 

    String ordersplitjson; 
    public String getOrdersplitjson() { 
     return ordersplitjson; 
    } 
    public void setOrdersplitjson(String ordersplitjson) { 
     this.ordersplitjson = ordersplitjson; 
    } 
    public String getCustomer_id() { 
     return customer_id; 
    } 
    public void setCustomer_id(String customer_id) { 
     this.customer_id = customer_id; 
    } 
    public String getHomedelivery() { 
     return homedelivery; 
    } 
    public void setHomedelivery(String homedelivery) { 
     this.homedelivery = homedelivery; 
    } 
    public String getSeatnum() { 
     return seatnum; 
    } 
    public void setSeatnum(String seatnum) { 
     this.seatnum = seatnum; 
    } 
    public String getLocationname() { 
     return locationname; 
    } 
    public void setLocationname(String locationname) { 
     this.locationname = locationname; 
    } 
    public String getRownum() { 
     return rownum; 
    } 
    public void setRownum(String rownum) { 
     this.rownum = rownum; 
    } 
    String customer_id; 

    String homedelivery; 
    String seatnum; 

    String locationname; 
    String rownum; 


} 

有誰請讓我知道如何解決這一問題

enter image description here

我用的澤西1,當我用你的類的給我一個compiltion錯誤在Eclipse作爲hwon在畫面

enter image description here

+0

我剛剛取代jsonp到json,我越來越沒有'Access-Control-Allow-Origin'標題是壓力請求所請求的資源。因此不允許原產地'null'訪問。 – Pawan

+0

擺脫與jsonp相關的一切。 jsonp會自動進行GET(因此是405)。與POST的jsonp是不好的。 –

+0

當我修改jsonp到json沒有'Access-Control-Allow-Origin'標題出現在請求的資源上。因此不允許原產地'null'訪問。 – Pawan

回答

3

(1)dataType: 'jsonp'json。擺脫所有jsonp相關的東西。它應該是json。 jsonp將自動更改爲GET請求,因此405(方法不允許)。您的資源方法接受POST。

(2)CORS的問題。您需要一個過濾器來處理預飛行。如果使用的是新澤西州1,你可以使用這個類

import com.sun.jersey.spi.container.ContainerRequest; 
import com.sun.jersey.spi.container.ContainerResponse; 
import com.sun.jersey.spi.container.ContainerResponseFilter; 

public class CORSFilter implements ContainerResponseFilter { 
    @Override 
    public ContainerResponse filter(ContainerRequest request, 
      ContainerResponse response) { 

     response.getHttpHeaders().add("Access-Control-Allow-Origin", "*"); 
     response.getHttpHeaders().add("Access-Control-Allow-Headers", 
       "origin, content-type, accept, authorization"); 
     response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true"); 
     response.getHttpHeaders().add("Access-Control-Allow-Methods", 
       "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 

     return response; 
    } 
} 

然後註冊它像

resourceConfig.getContainerResponseFilters().add(new CORSFilter()); 

隨着web.xml中添加此

<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
    <param-value>com.yourpackage.CORSFilter</param-value> 
</init-param> 

包含<servlet>元素中澤西servlet

+0

嗨,我使用澤西島1,當我使用你的課程時,我在日食中得到一個編譯erorr,因爲我的問題中的照片是shon,請問我可以讓我知道如何去掉這個錯誤。 – Pawan

+0

我不知道我沒有我的顯微鏡。小讀 –

+0

很抱歉的是,它給我 - 工具com.sun.jersey.spi.container.ContainerResponseFilter.filter \t - 方法過濾器類型CORSFilter必須覆蓋一個超 \t方法 – Pawan

相關問題