我必须写一份尊重我不喜欢的合同的WS,但这就是工作。
对于给定的请求,我有一些简单的命名参数,如user(Integer)。
目前,这很简单,我用这两个字段编写了一个命令对象,我的请求是:
@RequestMapping("/")
public void request(Cmd cmd) {
[impl]
}
现在坏的部分:我可以有任何ID = blabla,blabla,blabla
例如,请求可能是/?user = 4& 10 = ok& 3432 =简单,有效
您是否有任何解决方案可以很好,因为在对象命令中有一个或两个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;
}
}
答案 0 :(得分:2)
除非我误解,是的,非常简单
@RequestMapping("/")
public void request(@RequestParam MultiValueMap<String, String> allParams) {
请注意,name
注释没有@RequestParam
属性。 This is explained in the javadoc of @RequestParam
.