java Spring集成-在消息中添加自定义标题

rur96b6h  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(127)

我正在使用SpringIntegrationfilter对传入的有效负载进行结构验证,如果验证失败,那么我想在原始消息中添加一些自定义头。
过滤器代码如下:

@Service("structureValidationFilter")
public class StructureValidationFilter implements MessageSelector {

@Override
public boolean accept(Message<?> message) {
    // TODO Auto-generated method stub
    boolean status=true;

    if(message.getPayload() instanceof CFKRequestBody) {
        CFKRequestBody body=(CFKRequestBody)message.getPayload();
        if(!body.getInitiatingPartyId().equalsIgnoreCase("BPKV")) {
            message = MutableMessageBuilder.fromMessage(message).
                    setHeader("BPKV_ERROR_CODE", "Ïnvalid Initiating part id").
                    setHeader("HTTP_STATUS", "400").build();

            return false;   
        }

    }
    return status;
}

}

但是头没有填充到消息中。看不到添加到下一个组件中的头。我在这里做错了什么。

zkure5ic

zkure5ic1#

您不能替换一个参数并期望它被传播到下一个组件; Java不是这样工作的;则简单地丢弃你的新消息。
使用服务激活器而不是过滤器,并返回新消息,或者null,这是在该点结束流的信号。

xqkwcwgp

xqkwcwgp2#

您应该像这样将结果封装在Message中

@Override
public Message accept(Message<?> message) {
    // TODO Auto-generated method stub
    boolean status=true;

    if(message.getPayload() instanceof CFKRequestBody) {
        CFKRequestBody body=(CFKRequestBody)message.getPayload();
        if(!body.getInitiatingPartyId().equalsIgnoreCase("BPKV")) {
            return MutableMessageBuilder.fromMessage(message).                        
                    setHeader("BPKV_ERROR_CODE", "Ïnvalid Initiating part id").
                    setHeader("HTTP_STATUS", "400").
                    build();
        }

    }
    return MutableMessageBuilder.fromMessage(message).build();
}

相关问题