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

내가 당신의 클래스가 사진

에 hwon으로 이클립스 나에게 compiltion 오류를주고 사용하는 경우 나, 뉴저지 1 사용하고 있습니다

enter image description here

+0

방금 ​​jsonp를 json으로 바꿨습니다. 'Access-Control-Allow-Origin'헤더가 없습니다. ent를 요청한 자원에 적용합니다. 따라서 원본 '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을 사용하는 경우 포함 <servlet> 요소 내에이

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

를 추가, web.xml과는

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

처럼 등록 그런 다음이 클래스

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

을 사용할 수 있습니다 저지 서블릿

+0

안녕하세요, 저는 저지 1을 사용하고 있습니다. 수업을 사용했을 때 제 질문의 그림에 나와있는 것처럼 일식에 편집 오류가 발생했습니다.이 오류를 제거하는 방법을 알려 주시기 바랍니다. – Pawan

+0

나는 현미경이 없다는 것을 모른다. 그에 대한 –

+0

죄송 읽을 작은하려면, 나를 포기 - 구현 com.sun.jersey.spi.container.ContainerResponseFilter.filter \t - 방법 필터 수퍼 \t 방법 – Pawan

관련 문제