在Spring MVC中处理类似地图的请求参数

时间:2017-03-20 17:21:44

标签: spring-mvc

假设我有一个问题列表的表单,我需要0/1的答案。我可以轻松地使用无线电建模静态列表,例如

<input type="radio" name="question1" value="0">
<input type="radio" name="question1" value="1">
<br>
<input type="radio" name="question2" value="0">
<input type="radio" name="question2" value="1">

@RequestMapping("/answer")
public String answer(Integer question1, Integer question2) {

但我有一个动态的问题列表,每个问题都有一个数字ID。因此,我尝试对其进行建模,如下所示(HTML是通过问题列表上的迭代动态创建的):

<input type="radio" name="question[42]" value="0">
<input type="radio" name="question[42]" value="1">
<br>
<input type="radio" name="question[51]" value="0">
<input type="radio" name="question[51]" value="1">

其中42和51是问题ID。 我期望捕获我的Spring控制器的Map参数中的所有值,如下所示:

@RequestMapping("/answer")
public String answer(@RequestAttribute("question") HashMap<Integer, Integer> question) {

它没有用(该方法没有被调用)。 我也尝试过使用字符串ID:

<input type="radio" name="question['42']" value="0">

@RequestMapping("/answer")
public String answer(@RequestAttribute("question") HashMap<String, Integer> question) {

和以前一样。 它只有在我使用字符串/字符串的映射时才有效,但在这种情况下,我在地图中获取所有请求参数,然后我将需要解析:

@RequestMapping("/answer")
public String answer(@RequestAttribute("question") HashMap<String, String> question) {

--> question.keys: "question[42]", "question[51]"

那么处理动态无线电的正确方法是什么,或者更常见的是类似地图的请求参数?

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但如果我把地图放在一个bean里面就可以了:

public class QuestionForm {
    private HashMap<Long, String> question;

    public HashMap<Long, String> getQuestion() {
        return question;
    }

    public void setQuestion(HashMap<Long, String> question) {
        this.question = question;
    }
}

@RequestMapping("/answer")
public String answer(QuestionForm questionForm) {