2014-02-24 31 views
0

我必须写一个尊重合同的WS,我非常不喜欢,但那是工作。春季绑定:如何使用像地图一样的工作?

对于给定的请求,我有一些简单的命名参数,如user(Integer)。

就目前而言,这很容易,我写了一个命令对象与此两场,我的要求是:

@RequestMapping("/") 
public void request(Cmd cmd) { 
    [impl] 
} 

现在坏的部分:我能有什么情侣ID =布拉布拉,布拉布拉,布拉布拉的

例如,要求可能是/?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; 
    } 
} 

回答

2

除非我误解,是的,很简单的

@RequestMapping("/") 
public void request(@RequestParam MultiValueMap<String, String> allParams) { 

注意,没有为@RequestParam注释没有name属性。 This is explained in the javadoc of @RequestParam.

+0

当然,但我想我的cmd对象与用户字段(和其他我没有提到):s – farvilain

+0

@farvilain你能告诉我们你的命令对象实际上是什么样子吗?我不认为我明白你想要什么。 –

+0

编辑帖子以包含cmd对象 – farvilain