Spring绑定:如何使用map之类的东西?

时间:2014-02-24 13:46:50

标签: java spring spring-mvc binding

我必须写一份尊重我不喜欢的合同的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;
    }
}

1 个答案:

答案 0 :(得分:2)

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

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

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