Почему эта конфигурация Apache Camel Rest позволяет использовать другие медиатипы, отличные от json, даже если они настроены только на использование jsons? - PullRequest
0 голосов
/ 25 февраля 2019

Я создаю маршрут, используя верблюда Apache со следующей конфигурацией:

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import org.apache.camel.Consume;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class RestToKafkaRoute extends RouteBuilder {
    private final Config     
    config=ConfigFactory.load("application.conf").resolve();

@Override
public void configure() throws Exception {
    final String host = config.getString("infrastructure.rest.host");
    final Integer port = config.getInt("infrastructure.rest.port");
    final String context = config.getString("infrastructure.rest.context");
    final String path = config.getString("infrastructure.rest.path");
    final String endpoint = config.getString("infrastructure.kafka.endpoint");

    System.out.printf("Consuming from %s. Sending to %s\n", host + ":" + port + "/" + context + "/" + path, endpoint);

    restConfiguration()
            .component("jetty")
            .host(host)
            .port(port);

    rest("/" + context)
            .post("/" + path)
            .consumes("application/json").route().routeId(path)
            .to(endpoint);
    }
}

После настройки я выполняю тест:

@Test
public void callRestServiceWithHandledMethodTest() {

    given()
            .body("this_is_not_a_json")
            .when()
            .post("/{path}", path)
            .then()
            .log().status()
            .statusCode(200);
}

Этот тест проходит, хотя по моему мнениюон должен потерпеть неудачу, так как тело не json, а простой текст.

Мои вопросы:

Что на самом деле делает метод .consumes()?

Почему он допускает типы данных, отличные от application / json?

Не должен ли тест завершиться неудачей?

Как можно заставить службу остальных отклонять типы данных, отличные от json?

1 Ответ

0 голосов
/ 26 февраля 2019

Тип носителя установлен как заголовок HTTP типа содержимого, поэтому вызовите службу REST, указав в этом заголовке нечто, отличное от json.Также вам нужно включить проверку клиентского запроса, чтобы Camel автоматически отклонил его.Если вы не используете это, то от фактического http-компонента, выбранного вами для rest-dsl, зависит, может ли он отклонить запрос или нет (вы используете jetty).

См. Документацию по проверке клиентского запроса.: https://github.com/apache/camel/blob/master/core/camel-core/src/main/docs/rest-dsl.adoc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...