1

我正在开发一个应用程序,我在其中使用 spring 框架 3.1.1 和 rest api。在其中,我开发了一个休息控制器,它将在接收到 url“/rest/host/{id}”的“GET”请求时将控件重定向到我的视图(表单)。现在,在用户填写表单后,发布的数据也使用 rest 处理。但是在我为处理发布请求而编写的方法中,我在一个字符串中获取了所有参数,我想解析并插入到数据库中。谁能说出解析这个春季数据的正确方法?我可以使用 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>

休息代码..

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;
    }

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

4

1 回答 1

3

除了请求正文,您可以使用 @ModelAttribute 并将所有表单数据绑定到一个由 Spring Framework 在表单发布时填充的 pojo(snooze) 中。

您需要在 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; 
    }
    

希望这对您有所帮助。干杯。

于 2012-06-06T08:13:57.837 回答