有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自apache camel的java更改http响应和正文响应

我有两条路线:

<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) 个答案

  1. # 1 楼答案

    正如@bedla在评论中提到的,文件使用者(仅在消息传递中)无法发送响应。所以很难理解你的情况

    但是,如果使用Camel实现HTTP服务器(消费者;输入输出消息),则可以将响应的HTTP状态代码设置为消息头

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