当前位置: 首页 > 知识库问答 >
问题:

使bean参数可选

孔梓
2023-03-14

我有下面的路由和bean来从属性文件中获取消息。在一些消息中,我必须替换消息中的参数。因此,我在bean中寻找一个不编写2个方法的解决方案,一个是带参数的(getMessageWitArgs),另一个是不带参数的(getMessage)。

它是否可以通过在路由中使用DSL来摆脱bean中的getMessagewith Args,或者使getMessage中的参数可选,以便我在bean中最后有一个方法?

路线

@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}");
}

@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;
    }
}

共有2个答案

通令
2023-03-14

如果您的目标是只保留一个方法,那么只保留所有参数的方法,因为您知道如果头参数没有设置,它的值将是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;
}
范俊逸
2023-03-14

我认为任意数量的争论可能对你有用。

http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

所以Bean现在将只有一个像:

public String getMessageWithArgs(@Header("functionId") String functionId, 
            @Header("arguments") String... arguments) {
        String messageId = arguments[0];
        //Doing something to get the message
        return message;
    }

我不确定是否会是这样,但这可能是一种有帮助的方式。。

 类似资料:
  • 问题内容: 在我的应用程序中,我正在使用ContextLoaderListener从多个jar中加载上下文文件,方法是: 这意味着我无需导入即可引用其他jar中的bean。 在应用程序中,有多个部署选项,在某些部署中,可以排除jar。为了证明这一点,我希望一些bean引用是可选的。例如: 在上面的示例中,如果未找到引用,我想让optionalBeanReference1等于null(以某种方式将其

  • 4.2. 使用可选参数和命名参数 Python 允许函数参数有缺省值;如果调用函数时不使用参数,参数将获得它的缺省值。此外,通过使用命名参数还可以以任意顺序指定参数。SQL Server Transact/SQL 中的存储过程也可以做到这些;如果你是脚本高手,你可以略过这部分。 info 函数就是这样一个例子,它有两个可选参数。 def info(object, spacing=10, coll

  • 用户在这个插件的很多方面都可以进行定制,用户通过插件选项来达到这个目的(这些选项会在插件初始化的时候起效)。这些选项包括: 选项 描述 aspectRatio 长宽比,以后在选择时候就会维持不变。例如:"4:3" autoHide 如果设为true,那么在选择完后区域会消失。Default:false classPrefix 预先给插件元素的前缀 Default:imgareaselect dis

  • 英文原文:http://www.phpconcept.net/pclzip/user-guide/5 可选参数(普通参数) PCLZIP_OPT_PATH PCLZIP_OPT_ADD_PATH PCLZIP_OPT_REMOVE_PATH PCLZIP_OPT_REMOVE_ALL_PATH PCLZIP_OPT_SET_CHMOD PCLZIP_OPT_BY_NAME PCLZIP_OPT_B

  • 经过一些实验,我已经能够使用和一些EL将我的GET参数注入到(因此是JSF)bean中。 现在,除了从,我无法将GET参数注入(即CDI-)bean。 因此,我一直在阅读有关JSF豆和CDI豆的优缺点。简而言之,我被两个问题困住了:第一。与 CDI bean 相比,使用 JSF bean 时会遇到任何缺点吗?2nd. 如果是这样,有没有一种干净的方法可以将我的 GET 参数注入到 CDI bean

  • You can customize Simditor by passing optional options when initializing Simditor. Here are some optional options and their default values: editor = new Simditor textarea: null placeholder: ''