Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 浏览器发送选项,而不是放置或删除_Java_Gwt_Restlet - Fatal编程技术网

Java 浏览器发送选项,而不是放置或删除

Java 浏览器发送选项,而不是放置或删除,java,gwt,restlet,Java,Gwt,Restlet,我正在将GWT与Restlet一起使用,希望向我的Restserver发送一个删除。这是我的客户端代码,用于发送: private void recipeDeleteButton() { String id = views.getViewRecipeDetail().getRecipeId().getText(); ClientResource res = new ClientResource(Rest.RECIPE_CLIENT_RESOURCE_LOCAL + id);

我正在将GWT与Restlet一起使用,希望向我的Restserver发送一个删除。这是我的客户端代码,用于发送:

private void recipeDeleteButton() {
    String id = views.getViewRecipeDetail().getRecipeId().getText();
    ClientResource res = new ClientResource(Rest.RECIPE_CLIENT_RESOURCE_LOCAL + id);
    res.setOnResponse(new Uniform() {

        @Override
        public void handle(Request request, Response response) {
            System.out.println(response.getStatus().getDescription());
        }

    });
    res.delete();
}
但当我想测试这一点时,我的Firefox会说:

[22:28:28.796]选项http://localhost:8182/recipe/35 [HTTP/1.1 405方法不允许3ms]

我已经在这里找到了一个帖子:但这并不能解决我的问题。对于POST和GET,它可以工作,但只能使用Firefox插件来解决SOP的问题,也可以添加新的标题,但添加PUT、DELETE和OPTIONS并不能解决此问题

有人知道这个问题的解决方案吗,提前谢谢

编辑

我在服务器端试过类似的东西,但他还是有405

Series<Header> responseHeaders = (Series<Header>) getResponse().getAttributes().get("org.restlet.http.headers");
    if (responseHeaders == null) {
        responseHeaders = new Series<Header>(Header.class);
        responseHeaders.add(new Header("Access-Control-Allow-Origin", "*"));
        responseHeaders.add(new Header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS"));
        getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders);
    }
Series responseHeaders=(Series)getResponse().getAttributes().get(“org.restlet.http.headers”);
if(responseHeaders==null){
responseHeaders=新系列(Header.class);
add(新标题(“访问控制允许源代码”、“*”));
添加(新标题(“访问控制允许方法”、“获取、发布、放置、删除、选项”);
getResponse().getAttributes().put(“org.restlet.http.headers”,responseHeaders);
}

发送选项请求是CORS请求的预期行为。您可以为Restserver中的选项添加处理程序


您需要返回有效的访问控制允许来源访问控制允许方法。然后,客户机将发送第二个请求(在您的情况下为PUT或DELETE)。

问题在于您没有用于OPTIONS请求的处理程序(我假设它有用于GET和DELETE的处理程序)。简单的方法是在服务器上为所有选项请求创建全局处理程序,而不管路径如何,或者为/recipe/35创建选项处理程序。我刚刚在删除注释上面添加了一个选项注释,现在它可以工作了。非常感谢!