使用javascript fetch api与java spark挂起的承诺状态(POST请求)

时间:2018-04-14 16:49:04

标签: javascript java vue.js fetch-api spark-java

我正在尝试使用ES6的fetch api将一些登录数据发布到java spark服务器。 GET请求工作得很好,但是当我尝试发布一些东西时,客户端的Promise保持“待定”状态。我检查了,服务器收到请求主体,并将其解析为一个对象。使用postman,它也返回true或false,所以我认为CORS设置有问题。我是新手,所以我认为它应该有效。我正在使用VueJS,但我不认为这里真的很重要,以为我会添加这些信息,也许它会有所帮助。我将在下面发布代码。

JS:

methods: {
    login: function () {
        data = '"perfectly valid json string"'
        this.postData('http://te.st/login', data)
    },
    postData: function(url, data){
        return fetch(url, {
            body: data,
            method: 'POST',
        })
        .then(response => response.json())
        .then(function (result){
            app.response = result
        })
    }
}

Java:

private static void enableCORS(final String origin, final String methods, final String headers) {

    options("/*", (request, response) -> {

        String accessControlRequestHeaders = request.headers("Access-Control-Request-Headers");
        if (accessControlRequestHeaders != null) {
            response.header("Access-Control-Allow-Headers", accessControlRequestHeaders);
        }

        String accessControlRequestMethod = request.headers("Access-Control-Request-Method");
        if (accessControlRequestMethod != null) {
            response.header("Access-Control-Allow-Methods", accessControlRequestMethod);
        }

        return "OK";
    });

    before((request, response) -> {
        response.header("Access-Control-Allow-Origin", origin);
        response.header("Access-Control-Request-Method", methods);
        response.header("Access-Control-Allow-Headers", headers);
        response.type("application/json");
    });
}

(在代码中称为enableCORS("*","GET,POST","Origin, Content-Type, Access-Control-Allow-Origin");

终点:

post("/login", (req, res) -> {
        boolean ret = dao.checkLogin(gson.fromJson(req.body(), User.class));
        return gson.toJson(ret);
    });

0 个答案:

没有答案