Java 泽西-RS显示405在邮政

Java 泽西-RS显示405在邮政,java,jax-rs,Java,Jax Rs,我正在尝试使用jersey创建一个PostWebService。以下是我的后方法 @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. retu

我正在尝试使用jersey创建一个PostWebService。以下是我的后方法

@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>";
}
@POST
@路径(“getEncodedURL”)
@生成(MediaType.TEXT\u XML)
公共字符串getEncodedURL(@FormParam(value=“url”)字符串url,@FormParam(value=“eventId”)int eventId){
//mylogic在此获取编码的url。
返回“+eventId+”+url+”;
}
下面是我的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");}
 });

输入要编码的URL:(字符串)
事件id:(int)
函数getEncodedURLAgainstURL(){
var testName=$(“#testName”).val();
var testEventId=$(“#testEventId”).val();
url=loc+“服务/SnapEvent/getEncodedURL”;
$.ajax({
类型:“post”,
url:url,
数据:{'eventId':testEventId,'url':testName},
/*数据类型:“文本”,
contentType:“文本/html”*/
成功:函数(resp){window.location=url},
错误:函数(e){alert(“发生错误”);}
});
}


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

当您使用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>

输入要编码的URL:(字符串)
事件id:(int)

我认为问题在于:

 success: function(resp){window.location = url},
如果您的AJAX调用成功返回,这将导致浏览器导航到AJAX请求提交到的同一URL。这将(我相信)导致访问该URL,如果该URL仅处理帖子,您将得到一个HTTP405方法不允许的错误


发送回浏览器的响应对象中包含URL。相反,您需要做的是从响应对象中获取URL并导航到该对象。

有趣。您是否尝试用CURL验证相同的请求?类似于:CURL -H-XPOST数据“EvTeNe= Value1& URL= value”http://LoalHoo: 8080 /Services / SnPase/GETEnCODE DurLoad在HTTP和//之间的空白之间,不知道如何在这里逃出URL。我不知道卷曲。您能在这里解释一下它的完整语法吗?curl是一个命令行工具,用于发出/发送不同的请求。我经常使用它作为Web服务的快速测试工具。例如:curl-H“Content-Type:application/json”-X POST--data'[{“name”:“Jersey”,“site”:“},{“age”:33,“phone”:“158158158”,“name”:“Foo”},{“name”:“json-P”,“site”:“}]”,用于测试Jersey示例json处理webapp。因为正如您在本例中所看到的,该工具相当完整,其语法也相当完整。有关完整文档,请参阅。如果参数位于类似url的url中,则使用查询参数。我也试过了,但还是一样的错误…:(url是一个地址变量,它更改了窗口位置。我将url更改为google.com,它传输时没有任何问题。我相信返回类型中存在一些问题。我返回的是一个自定义xml字符串,它没有显示。@StruglingUser:如果您在
成功中设置
window.location='google.com'
s
处理程序,那么是的,重定向应该可以工作。您的web服务很可能成功地将XML返回到浏览器,我希望您的
成功
处理程序可以在
resp
参数中被调用。但是,您的
成功
处理程序对
resp
没有任何作用,这就是为什么您的XML字符串没有显示。是的,你是对的@Luke。我在这里所做的是通过post方法点击该链接,然后再次将位置更改为该链接,从而导致他搜索get方法。你能在这里指导我如何在不再次点击的情况下更改页面的url吗。@StruglingUser:这里有一个问题可能会帮助你获取XML AJAX请求中的数据:非常感谢。祝福你