如何在Spring MVC中显式获取发布数据?


81

有没有办法获取帖子数据本身?我知道spring处理将发布数据绑定到java对象。但是,给定两个要处理的字段,如何获得该数据?

例如,假设我的表单有两个字段:

 <input type="text" name="value1" id="value1"/>
 <input type="text" name="value2" id="value2"/>

我将如何在控制器中检索这些值?

Answers:


135

如果使用的是内置控制器实例之一,则控制器方法的参数之一将是Request对象。您可以调用request.getParameter("value1")以获取POST(或PUT)数据值。

如果您使用的是Spring MVC注释,则可以在方法的参数中添加一个带注释的参数:

@RequestMapping(value = "/someUrl")
public String someMethod(@RequestParam("value1") String valueOne) {
 //do stuff with valueOne variable here
}

1
可以与多个请求参数一起使用吗,对吗?您不必包装一个对象吗?stackoverflow.com/q/12862320/106261
NimChimpsky 2012年

1
<3,对于您不希望/不需要模型支持的表单(用于搜索表单或联系表单等)的情况
Don Cheadle,2015年

37

OP的确切问题的另一个答案是将consumes内容类型设置为"text/plain",然后声明一个@RequestBody String输入参数。这将传递POST数据的文本作为声明的String变量(postPayload在以下示例中)。

当然,这假定您的POST负载是文本数据(如OP所述)。

例:

    @RequestMapping(value = "/your/url/here", method = RequestMethod.POST, consumes = "text/plain")
    public ModelAndView someMethod(@RequestBody String postPayload) {    
        // ...    
    }

2
这是我一直在寻找的答案。通过“发布数据本身”,我理解相同。谢谢!
mauromartini 2014年

对于多个post参数(例如value1value2,这将为两个值创建一个String?然后您将需要解析出各个值?为什么当您可以像接受的答案中那样分别指定/获取每个值时为什么这样做?
Don Cheadle

1
@mmcrae-这只是解决问题的另一种方法,对其他没有多个POST参数但只具有一小段文本或二进制数据的用户而言可能有用。这就是我的情况,这是我单击该问题时希望学习的内容。
simon 2015年

1
正是我想要的。如果发布json,它也可以与consumpts =“ application / json”一起使用。
Manish

你好。我正在使用Postman测试我的API。邮递员帮助我为POST填充数据。问题是我使用时得到403 RequestMethod.POST。我什至添加了,@CrossOrigin(origins = "*")但我仍然得到相同的结果...不知道发生了什么...我使用了与您的答案相同的签名(除了在我的情况下someMethod返回a String)...
Kurt Miller

27

Spring MVC在Servlet API之上运行。因此,您可以HttpServletRequest#getParameter()为此使用:

String value1 = request.getParameter("value1");
String value2 = request.getParameter("value2");

HttpServletRequestSpring MVC的内部应该已经提供给您的方法参数的一个handleRequest()方法。


1
Hai @BalusC,就我而言,我有20多个变量在请求中。但是我有一个带有所有请求参数变量的bean。现在,我想将所有值从请求中获取到bean中,而不是一一获取。通过使用“ ModelDrivenBean”在struts2中具有此功能。在Spring框架中,我们是否有类似的功能?
vissu'4

2
是的,使用@ModelAttribute批注和一个表单支持bean。该链接很好地描述了如何执行此操作:viralpatel.net/blogs/2010/07/spring-3-mvc-handling-forms.html

@vissu如果您有20个以上的变量,那么您应该真正考虑一下简化
CodeMonkey

1
您好BalusC。按照下面simmon的回答,我正在使用Postman测试我的API。邮递员帮助我为POST填充数据。问题是我使用时得到403 RequestMethod.POST。我什至添加了,@CrossOrigin(origins = "*")但我仍然得到相同的结果...不知道发生了什么...我使用了与您的答案相同的签名(除了在我的情况下someMethod返回a String)...
Kurt Miller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.