我正在尝试使用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方法并返回时出错。
答案 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从响应对象中取出并转而使用它。