我必须写一个尊重合同的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.

10-08 13:06