Struts2 setter 方法 POST 参数带破折号
Struts2 setter method for POST parameter with dash
我有 mailgun.com 路由将电子邮件 POST 转发到我的 Struts2 操作。 mailgun POST 请求内容在某些参数名称中有破折号:sender, subject (OK) 但我如何映射 setter 我的 Struts2 操作中 POST 参数的方法:body-plain
(包含破折号)、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;
}
}
然后您需要将 body-plain
重命名为 bodyPlain
以将参数映射到操作字段。 Java 和命名约定对 classes 使用 camelCased 实例变量。这是将请求参数映射到操作的强制性规则 class.
你可以translate/rename他们在任何级别,过滤器,url-重写规则,拦截器等。任何方式参数传递给ActionContext
是一个地图,然后如果您尝试
,遍历地图并从键名中删除破折号会很容易
Map<String, Object[]> parameters = ActionContext.getContext().getParameters();
我无法更改 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));
}
}
}
}
我有 mailgun.com 路由将电子邮件 POST 转发到我的 Struts2 操作。 mailgun POST 请求内容在某些参数名称中有破折号:sender, subject (OK) 但我如何映射 setter 我的 Struts2 操作中 POST 参数的方法:body-plain
(包含破折号)、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;
}
}
然后您需要将 body-plain
重命名为 bodyPlain
以将参数映射到操作字段。 Java 和命名约定对 classes 使用 camelCased 实例变量。这是将请求参数映射到操作的强制性规则 class.
你可以translate/rename他们在任何级别,过滤器,url-重写规则,拦截器等。任何方式参数传递给ActionContext
是一个地图,然后如果您尝试
Map<String, Object[]> parameters = ActionContext.getContext().getParameters();
我无法更改 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));
}
}
}
}