簡體   English   中英

帶破折號的 POST 參數的 Struts2 setter 方法

[英]Struts2 setter method for POST parameter with dash

我有 mailgun.com 路由將電子郵件 POST 轉發到我的 Struts2 操作。 mailgun POST 請求內容在某些參數名稱中出現破折號: sendersubject (OK) 但如何在我的 Struts2 Action 中映射 setter 方法以獲取 POST 參數: body-plain (contain dash), body-html , message-headers , Content-Type ?

我試過這個,但不工作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;
    }
}

我無法更改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));
                }
            }
        }
    }

然后您需要將body-plain重命名為bodyPlain以將參數映射到操作字段。 Java 和命名約定對類使用駝峰式實例變量。 這是將請求參數映射到操作類的強制性規則。

您可以在任何級別、過濾器、url 重寫規則、攔截器等上對它們進行翻譯/重命名。任何方式將參數傳遞給作為映射的ActionContext ,然后遍歷映射並從鍵名中刪除破折號將很容易,如果您嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM