2015-01-11 27 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

相关问题