我有下面的路由和bean来从属性文件获取消息.在某些消息中,我必须替换消息中的参数.因此,我一直在寻找一种解决方案,不需要在bean中编写两个方法:一个带参数(getMessageWithArgs),另一个不带参数(getMessage).

通过在路由中使用DSL来摆脱bean中的getMessageWithArgs,或者让getMessage中的参数成为可选的,这样我在bean中就有了一个方法,这是可行的吗?

Route

@Override
public void configure() throws Exception {

    from("activemq:queue:1234")
        .setHeader("functionId", simple(FUNCTION_ID))
        .process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                Message message = exchange.getIn();
                message.setHeader("messageId", "notice_1234_error_messageBox_1");
//              List<String> arguments = Arrays.asList("Test1", "Test2", "Test3");
//              message.setHeader("arguments", arguments);
            }   
        })
    .setHeader("message").method("messageBean", "getMessage( ${header.functionId}, ${header.messageId})")
    //.setHeader("message").method("messageBean", "getMessageWithArgs( ${header.functionId}, ${header.messageId}, ${header.arguments})") 
    .log("after calling getMessageWithoutValidation: ${body}");
}

Bean

@Component
public class MessageBean {

    public String getMessage(@Header("functionId") String functionId, 
            @Header("messageId") String messageId) {
        //Doing something to get the message
        return message;
    }


    public String getMessageWithArgs(@Header("functionId") String functionId,
            @Header("messageId") String messageId, 
            @Header("arguments") List<String>  arguments) {
        //Doing something to get the message
        return message;
    }
}

推荐答案

如果你的目标是只保留一个方法,那么只保留你所有参数都知道的方法,如果没有设置头arguments,它的值将是null.

public String getMessage(@Header("functionId") String functionId,
        @Header("messageId") String messageId, 
        @Header("arguments") List<String>  arguments) {
    if (arguments == null || arguments.isEmpty()) {
       // No arguments have been provided
    } else {
       // Arguments have been provided
    }
    return message;
}

Java相关问答推荐

试图弄清楚资源未能在我的Android应用程序中调用关闭警告

Java 21虚拟线程会解决转向react 式单线程框架的主要原因吗?

OpenJDK、4K显示和文本质量

缩小画布比例后更改滚动窗格的内部大小

Junit with Mockito for java

XPages-在第二次点击按钮之前延迟

为什么我的ArrayList索引的索引总是返回-1?

Java LocalTime.parse在本地PC上的Spring Boot中工作,但在Docker容器中不工作

Chunk(Int)已弃用并标记为要删除

为什么Java Annotation接口覆盖对象类中的方法

由于 list 中的权限错误,Android未生成

如何获取Instant#of EpochSecond(?)的最大值

MySQL数据库中未应用具有Spring数据的唯一约束

当我在Java中有一个Synchronized块来递增int时,必须声明一个变量Volatile吗?

JXBrowser是否支持加载Chrome扩展?

无法在Java中获取ElastiCache的AWS CloudWatch指标

为什么Instant没有从UTC转换为PostgreSQL的时区?

spring 数据Elastic search 与 spring 启动数据Elastic search 之间的区别是什么?

ReturnedRect在升级后反转

在JSON上获取反斜杠