我必须写一个尊重合同的WS,我很不喜欢,但这就是工作。
对于给定的请求,我有一些简单的命名参数,例如user(Integer)。
目前,这很容易,我用这两个字段编写了一个命令对象,我的要求是:
@RequestMapping("/")
public void request(Cmd cmd) {
[impl]
}
现在的坏处是:我可以有两个ID = blabla,blabla,blabla
例如,请求可以是/?user = 4&10 = ok&3432 =简单,有效
您有没有像在对象中使用Map命令一样带有一个或两个Spring绑定注释的解决方案?
当然,如果用户(和类似的其他人)不在地图中^^
因为我在端点代码中写了这样的东西,但是我发现它很丑陋:
final Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
cmd.getMap().put(Integer.valueOf(paramName), paramValues[0]);
}
编辑
我想要类似的东西(如果可能)
public class SubmitTaskCmd {
private Integer userID;
private String hash;
private Integer taskID;
private Map<Integer, String> others = new HashMap<Integer, String>();
public Map<Integer, String> getOthers() {
return others;
}
public void setOthers(final Map<Integer, String> others) {
this.test = test;
}
public Integer getUserID() {
return userID;
}
public void setUserID(final Integer userID) {
this.userID = userID;
}
public String getHash() {
return hash;
}
public void setHash(final String hash) {
this.hash = hash;
}
public void setTaskID(final Integer taskID) {
this.taskID = taskID;
}
public Integer getTaskID() {
return taskID;
}
}
最佳答案
除非我误解了,是的,非常简单
@RequestMapping("/")
public void request(@RequestParam MultiValueMap<String, String> allParams) {
请注意,
name
批注没有任何@RequestParam
属性。 This is explained in the javadoc of @RequestParam
.