简体   繁体   English

带破折号的 POST 参数的 Struts2 setter 方法

[英]Struts2 setter method for POST parameter with dash

I have mailgun.com routes to forward email POST to my Struts2 Action.我有 mailgun.com 路由将电子邮件 POST 转发到我的 Struts2 操作。 The mailgun POST request content dashes in some parameter names: sender , subject (OK) but how can I map setter method in my Struts2 Action for POST parameter: body-plain (contain dash), body-html , message-headers , Content-Type ? mailgun POST 请求内容在某些参数名称中出现破折号: sendersubject (OK) 但如何在我的 Struts2 Action 中映射 setter 方法以获取 POST 参数: body-plain (contain dash), body-html , message-headers , Content-Type ?

I have try this but not work bodyPlain=null :我试过这个,但不工作bodyPlain=null

public class MyAction extends ActionSupport {

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

    public void setBodyPlain(String bodyPlain) {
        this.bodyPlain = bodyPlain;
    }
}

I can`t change mailgun service code.我无法更改mailgun服务代码。 This is my code to deal with Struts2 naming conventions.这是我处理 Struts2 命名约定的代码。 If its have more clean solution for this problem let me know.如果它对这个问题有更干净的解决方案,请告诉我。

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

Then you need to rename body-plain to bodyPlain to map parameters to the action fields.然后您需要将body-plain重命名为bodyPlain以将参数映射到操作字段。 Java and naming conventions use camelCased instance variables for classes. Java 和命名约定对类使用驼峰式实例变量。 And this is an obligatory rule to map request parameters to the action class.这是将请求参数映射到操作类的强制性规则。

You can translate/rename them on any level, filter, url-rewrite rule, interceptor, etc. Any way parameters are passed to the ActionContext that is a map, then traversing the map and remove dashes from the key names would be easy if you try您可以在任何级别、过滤器、url 重写规则、拦截器等上对它们进行翻译/重命名。任何方式将参数传递给作为映射的ActionContext ,然后遍历映射并从键名中删除破折号将很容易,如果您尝试

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM