我正在尝试使用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);
});