如何在休息时解析spring post数据?

时间:2012-06-06 07:31:08

标签: spring rest spring-mvc

我正在开发一个应用程序,我在其中使用spring framework 3.1.1和rest api。在其中我已经开发了一个休息控制器,它将在接收URL“/ rest / host / {id}”的“GET”请求时将控件重定向到我的视图(表单)。现在,在用户填写表单后,还会使用rest来处理发布的数据。但在我编写的处理post请求的方法中,我在一个字符串中获取所有参数,我想要解析并插入到数据库中。任何人都能说出解析这个弹簧数据的正确方法是什么?我可以使用String.split(“&”)来做到这一点,但我不认为这是正确的方法。这是我的代码。

<form:form method="POST" action="/nagios-sms-1.0/rest/snooze/host/" commandName="snoozeBean">
        <table width="100%" border="5" cellpadding="0" cellspacing="0">
            <tr>
                <td align="center">
                    <table width="50%" border="5">
                        <tr>
                            <td colspan="3"></td>
                        </tr>
                        <tr>
                            <td width="30%"><form:label path="contactNumber">Enter host address</form:label></td>
                            <td width="30%"><form:input path="contactNumber" /></td>
                            <td />
                        </tr>
                        <tr>
                            <td width="30%"><form:label path="snoozeTimeoutValue">Enter Snooze time</form:label></td>
                            <td width="30%"><form:input path="snoozeTimeoutValue" /></td>
                            <td />
                        </tr>
                        <tr>
                            <td colspan="3">
                                <div id="buttons"
                                    style="margin-left: 20Px; margin-right: 100px;">
                                    <input type="submit" value="ok" /> <input type="reset" />
                                </div>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>

REST代码..

1)GET处理程序方法

@RequestMapping(value = "/host/{hostId}", method = RequestMethod.GET)
public String snoozeHost(@PathVariable int hostId, ModelMap map) {

    Snooze snooze = new Snooze();
    snooze.setHost_id(hostId);
    map.put("snoozeBean", snooze);
    return "host";

}

2)POST处理程序方法

    @RequestMapping(value = "/host", method = RequestMethod.POST)   
    @ResponseBody
    public String snoozeHostOK(@RequestBody String payload) {

            // i want to parse this payload data which contains my form fields.
        System.out.println("data : " + payload);
        return payload;
    }

任何形式的帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用@ModelAttribute而不是请求主体,并在表单的帖子上由Spring Framework填充的一个pojo(贪睡)中获取所有表单数据绑定。

你需要在你的get和post请求映射方法中声明snooze为@ModelAttribute。这样您就可以从表单中获取所有值。

<强>更新

在此处查看修改后的代码。

  1. GET处理程序方法

    @RequestMapping(value = "/host/{hostId}", method = RequestMethod.GET) 
    public String snoozeHost(@PathVariable int hostId, @ModelAttribute Snooze snooze, ModelMap map) { 
    
    snooze.setHost_id(hostId); 
    return "host"; 
    
    }
    
  2. POST处理程序方法

    @RequestMapping(value = "/host", method = RequestMethod.POST)    
    @ResponseBody 
    public String snoozeHostOK(@ModelAttribute Snooze snooze) { 
    
    // you can use the setter methods of snooze object to retrieve the field values.
    return payload; 
    }
    
  3. 希望这会对你有所帮助。欢呼声。