Функция PrettyPrint не работает в Apache Camel

#apache-camel

#apache-camel

Вопрос:

Я пытался использовать функцию PrettyPrint для отображения результата моего API, который использует Apache Camel. Вот контекст. У меня есть этот маршрут в моем коде

 // Route Definition for processing Health check request
                from("direct:processHealthCheckRequest")
                        .routeId("health")
                        .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
                        .setBody(constant(healthCheckResponse));
  

Когда я использую Postman для тестирования своего API, отображение находится в режиме pretty, даже если для него не установлено значение true, например

 {
  "status": "UP"
}
  

Теперь, когда я использую следующий код для установки PrettyPrint в false, я все равно получаю тот же результат. Похоже, функция PrettyPrint работает не так, как должна

 // Route Definition for processing Health check request
                from("direct:processHealthCheckRequest")
                        .routeId("health")
                        .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
                        .setBody(constant(healthCheckResponse))
                        .unmarshal()
                        .json(JsonLibrary.Jackson, HealthCheckResponse.class, false);
  

Я ожидаю, что результат будет отображаться в одной строке, как здесь, без изменения типа с JSON на string .

 {"status": "UP"}
  

Может кто-нибудь посоветовать по этому поводу?

Ответ №1:

Я всегда сталкивался с одной и той же проблемой при ручной настройке заголовка HTTP_RESPONSE_CODE. Я не знаю, почему это технически происходит — без этого HTTP-ответ всегда возвращает правильный JSON для меня.

Установка заголовка CONTENT_TYPE в application / json решила эту проблему:

 .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
  

Комментарии:

1. Спасибо, я попробовал это, но это не исправило, вероятно, потому, что у меня есть проект SpringBoot, и в файле свойств должна быть некоторая конфигурация.

Ответ №2:

Решение, которое, наконец, сработало, состояло в том, чтобы установить следующее в моем application.properties файле.

 camel.rest.data-format-property.prettyPrint=false
  

или вообще не предоставлять это свойство.

Ответ №3:

Попробуйте это:

 <removeHeaders id="removeHeaders_http*" pattern="CamelHttp*"/>
<setHeader headerName="Content-type" id="content_setHeader">
    <constant>application/x-www-form-urlencoded</constant>
</setHeader>
  

То же самое с Java DSL:

 .removeHeaders("CamelHttp*")
.setHeader("Content-type", constant("application/x-www-form-urlencoded"))
  

Комментарии:

1. не могли бы вы предложить решение с использованием DSL java вместо обозначения XML?

2. .removeHeaders(«CamelHttp *») .setHeader(«Content-type», константа («application / x-www-form-urlencoded»))