#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»))