JERSEY-RS在POST中显示405

时间:2014-01-11 10:48:47

标签: java jax-rs

我正在尝试使用jersey创建一个post webservice。以下是我的PostMethod;

@POST
@Path("getEncodedURL")
@Produces(MediaType.TEXT_XML)
public String getEncodedURL(@FormParam(value = "url") String url, @FormParam(value = "eventId") int eventId) {
//mylogic here to get encoded url.
return "<data><eventId>"+eventId+"</eventId><url>"+url+"</url></data>";
}

以下是我的index.jsp代码。

<form id="form10" method="post">
        Enter URL to Encode: (String) <input type="text" name="testName" id="testName">
        Event id: (int) <input type="text" name="testEventId" id="testEventId">
        <input type="button" Value="Invoke Web Service" onclick="getEncodedURLAgainstURL();">
    </form>

function getEncodedURLAgainstURL(){
var testName = $("#testName").val();
var testEventId = $("#testEventId").val();


url = loc+"services/SnapEvent/getEncodedURL";
$.ajax({
    type: "post",
    url: url,
    data:{'eventId': testEventId, 'url': testName},
   /* dataType:"text",
    contentType: "text/html",*/
     success: function(resp){window.location = url},
     error: function(e){ alert("An error has occured");}
 });

}

当我在表单中输入数据并点击调用时,它会给我HTTP状态405 - 方法不允许错误。我已经调试它点击调用它转到post方法并返回时出错。

2 个答案:

答案 0 :(得分:0)

当你使用ajax发送参数时,它们是@QueryParam,而不是@FormParam,那么html可以像这样改变。

<form id="form10" method="post">
    Enter URL to Encode: (String) <input type="text" name="url" id="testName">
    Event id: (int) <input type="text" name="eventId" id="testEventId">
    <input type="submit" Value="Invoke Web Service" />
</form>

答案 1 :(得分:0)

我认为问题在于:

 success: function(resp){window.location = url},

如果您的AJAX调用成功返回,则会导致浏览器导航到提交到的AJAX请求的相同URL。这将(我相信)导致对此URL的GET,如果URL仅处理POST,您将收到HTTP 405 Method Not Allowed错误。

您发送回浏览器的响应对象中包含一个URL。您需要做的是将URL从响应对象中取出并转而使用它。