带有短划线

时间:2015-09-29 15:34:48

标签: java struts2 mailgun

我有mailgun.com路由转发电子邮件POST到我的Struts2 Action。 mailgun POST请求内容破译为一些参数名称:发件人主题(确定)但是如何在我的Struts2 Action中为set参数映射setter方法: { {1}} (包含短划线),body-plainbody-htmlmessage-headers

我试过这个但不能正常工作Content-Type

bodyPlain=null

2 个答案:

答案 0 :(得分:2)

我无法更改mailgun服务代码。这是我处理Struts2命名约定的代码。如果它有更清洁的解决方案,请告诉我。

public class MyAction extends ActionSupport implements ParameterAware {

        private String sender;
        private String subject;
        private String bodyPlain;

        public String execute() {
            LOG.info(sender);
            LOG.info(subject);
            LOG.info(bodyPlain);
            return SUCCESS;
        }

        public void setSender(String sender) {
            this.sender = sender;
        }

        public void setSubject(String subject) {
            this.subject = subject;
        }

        @Override
        public void setParameters(Map<String, String[]> parameters) {
            if (parameters != null) {
                for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
                    String key = entry.getKey();
                    String[] value = entry.getValue();
                    if(key.equals("body-plain") && value.length > 0) this.bodyPlain = value[0];
                    LOG.info("key:" + key + " value:" + Arrays.toString(value));
                }
            }
        }
    }

答案 1 :(得分:1)

然后,您需要将body-plain重命名为 bodyPlain ,以将参数映射到操作字段。 Java和命名约定对类使用 camelCased 实例变量。 Ad这是将请求参数映射到操作类的强制性规则。你可以在任何级别翻译/重命名它们,过滤器,url-rewrite规则,拦截器等。任何方式参数都传递给ActionContext这是一个地图,然后遍历地图并删除密钥名称中的破折号如果你尝试就很容易

Map<String, Object[]> parameters =  ActionContext.getContext().getParameters();