如何解决 java vert.x 中的 CORS 问题
How to solve CORS problems in java vert.x
我在 localhost:8080 上有一个 vertx 后端服务器响应 REST 请求。
发送 GET 请求时,一切正常。
但是在带有参数的 DELETE 请求中我得到了 CORS 错误...
我的后端服务器是这样的:
@Override
public void start(Future<Void> fut) {
Router router = Router.router(vertx);
router.route("/").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/html").end("<h1>Hello from my first Vert.x 3 application</h1>");
});
router.get("/api/whiskies").handler(this::getAll);
router.delete("/api/whiskies/:id").handler(this::deleteOne);
vertx.createHttpServer().requestHandler(router::accept).listen(
config().getInteger("http.port", 8080), result -> {
if (result.succeeded()) {
fut.complete();
} else {
fut.fail(result.cause());
}
});
}
private void getAll(RoutingContext routingContext) {
routingContext.response().putHeader("content-type", "application/json; charset=utf-8")
.putHeader("Access-Control-Allow-Origin", "*")
.end(Json.encodePrettily(products.values()));
}
private void deleteOne(RoutingContext routingContext) {
Integer idAsInteger = Integer.valueOf(routingContext.request().getParam("id"));
products.remove(idAsInteger);
routingContext.response().putHeader("Access-Control-Allow-Origin", "*")
.setStatusCode(204).end();
}
}
我希望 .putHeader("Access-Control-Allow-Origin", "*") 部分可以解决所有 CORS 问题,但不知何故这只适用于代码的 GET 部分...
我的前端是 运行 在 localhost:4200 上的 Angular5 应用程序,如下所示:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders} from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
@Injectable()
export class HttpService {
constructor(private http:HttpClient) {}
getWhiskies() {
return this.http.get('http://localhost:8080/api/whiskies');
}
deleteWhisky(id :number) {
return this.http.delete('http://localhost:8080/api/whiskies/' + id);
}
}
Vert.x 为您提供开箱即用的 CORS 处理程序:
Router router = Router.router(vertx);
router.route().handler(CorsHandler.create("*"));
好的,所以我能够通过定义允许的方法以及 "Content-Type" header.
来修复它
参考以下内容link:
我在 localhost:8080 上有一个 vertx 后端服务器响应 REST 请求。
发送 GET 请求时,一切正常。
但是在带有参数的 DELETE 请求中我得到了 CORS 错误...
我的后端服务器是这样的:
@Override
public void start(Future<Void> fut) {
Router router = Router.router(vertx);
router.route("/").handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/html").end("<h1>Hello from my first Vert.x 3 application</h1>");
});
router.get("/api/whiskies").handler(this::getAll);
router.delete("/api/whiskies/:id").handler(this::deleteOne);
vertx.createHttpServer().requestHandler(router::accept).listen(
config().getInteger("http.port", 8080), result -> {
if (result.succeeded()) {
fut.complete();
} else {
fut.fail(result.cause());
}
});
}
private void getAll(RoutingContext routingContext) {
routingContext.response().putHeader("content-type", "application/json; charset=utf-8")
.putHeader("Access-Control-Allow-Origin", "*")
.end(Json.encodePrettily(products.values()));
}
private void deleteOne(RoutingContext routingContext) {
Integer idAsInteger = Integer.valueOf(routingContext.request().getParam("id"));
products.remove(idAsInteger);
routingContext.response().putHeader("Access-Control-Allow-Origin", "*")
.setStatusCode(204).end();
}
}
我希望 .putHeader("Access-Control-Allow-Origin", "*") 部分可以解决所有 CORS 问题,但不知何故这只适用于代码的 GET 部分...
我的前端是 运行 在 localhost:4200 上的 Angular5 应用程序,如下所示:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders} from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
@Injectable()
export class HttpService {
constructor(private http:HttpClient) {}
getWhiskies() {
return this.http.get('http://localhost:8080/api/whiskies');
}
deleteWhisky(id :number) {
return this.http.delete('http://localhost:8080/api/whiskies/' + id);
}
}
Vert.x 为您提供开箱即用的 CORS 处理程序:
Router router = Router.router(vertx);
router.route().handler(CorsHandler.create("*"));
好的,所以我能够通过定义允许的方法以及 "Content-Type" header.
来修复它参考以下内容link: