我有mailgun.com路由转发电子邮件POST到我的Struts2 Action。 mailgun POST请求内容破译为一些参数名称:发件人,主题(确定)但是如何在我的Struts2 Action中为set参数映射setter方法: { {1}} (包含短划线),body-plain
,body-html
,message-headers
?
我试过这个但不能正常工作Content-Type
:
bodyPlain=null
答案 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();