Как решить проблемы с CORS в Java Vert.x - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть внутренний сервер vertx на localhost: 8080, отвечающий на запрос 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 ...

Мой интерфейс - приложение Angular5, работающеена локальном хосте: 4200 выглядит так:

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);
  }
	
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Хорошо, поэтому я смог исправить это, определив разрешенные методы, а также заголовок «Content-Type».

См. Следующую ссылку для ссылок:

githubVertX-примеры

0 голосов
/ 20 сентября 2018

Vert.x предоставляет вам обработчик CORS из коробки:

Router router = Router.router(vertx);

router.route().handler(CorsHandler.create("*"));
...