[英]Struts2 setter method for POST parameter with dash
我有 mailgun.com 路由將電子郵件 POST 轉發到我的 Struts2 操作。 mailgun POST 請求內容在某些參數名稱中出現破折號: sender 、 subject (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.