изменить http ответов и тела от apache верблюд - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть 2 маршрута:

<route id="test1">
            <from uri="direct:start" />
            <setProperty propertyName="id">
                <simple>${header._id}</simple>
            </setProperty>
            <setBody>
                <simple>${in.headers._id}</simple>
            </setBody>                  
            <convertBodyTo type="java.lang.String" />
            <log logName="test" message="id : ${body}" />
            <to uri="file://inbox"/>
        </route>

<route id="tesst" streamCache="true">
        <from uri="file://inbox" />
        <convertBodyTo type="java.lang.String" />
        <log logName="test"
            message="from inbox: ${body}" />
        <setProperty propertyName="test">
            <simple>${body}</simple>
        </setProperty>
        <to
            uri="sql: SELECT blabla FROM blabla WHERE test = :#${property.test}" />
        <setProperty propertyName="result">
            <simple>${body}</simple>
        </setProperty>
        <choice>
            <when>
                <simple>${property.result} != ""</simple>
                <log logName="test"
                    message="call procedure.." />
                <to uri="sql: CALL public.sp_test(:#${property.test})" />

            </when>
            <otherwise>
                <log logName="test" message="Data not found!" />
                <setHeader headerName="Exchange.HTTP_RESPONSE_CODE">
                    <constant>404</constant>
                </setHeader>
                <camel:setBody>
                    <simple resultType="java.lang.String">Data not found!</simple>
                </camel:setBody>
            </otherwise>
        </choice>
    </route>

Когда я вставляю неправильные данные, HTTP-ответ я получаю еще 200. Я хочу сделать HTTP-ответ 404 после некоторой проверки в проверке выбора, когда в противном случае. я уже пробовал setheader, setheaderout, но ни один из них не работает. как я могу это сделать?

1 Ответ

0 голосов
/ 16 апреля 2020

Как упомянуто @bedla в комментариях, потребитель Файла (обмен сообщениями только для чтения) не может отправить ответ. Так что трудно понять ваш случай.

Однако, если вы внедряете HTTP-сервер (потребитель; входящие сообщения) с Camel, вы можете установить код состояния HTTP ответа в виде заголовка сообщения

.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(404))
...