如何在Spring 3.0中绑定请求参数?

时间:2011-08-25 16:37:56

标签: spring-mvc

我正在构建一个接收第三方服务请求的控制器。这项服务要求5个参数,我需要绑定到Message类。

说,我在请求中,我正在

?a=x&b=y&c=z&d=w&e=k&f=t

Message类是

public class Message{
 String a;
 String b;
 String c;
 String d;
 String e;
 String f;
 public Message(String a, String b, String c, String d, String e, String f){
     this.a=a;this.b=b;this.c=c;this.d=d;this.e=e;this.f=f;
 }
 ....// along with getters and setters
}

一种选择是在方法控制器中使用@RequestParam,但是我必须传递所有参数,然后手动实例化Message对象。我不想这样做,因为参数计数太大。

可以使用init binder / web数据绑定器完成吗?怎么样?

3 个答案:

答案 0 :(得分:7)

您无需执行任何特殊操作即可实现此功能,只需向控制器方法声明Message参数:

@RequestMapping
public String handleRequest(Message message) {
   ...
}

Spring会将每个参数绑定到Message上的属性,在那里可以找到一个。如果Message具有getter和setter(以及默认构造函数),那么它将起作用。如果你想使用非默认构造函数或直接字段注入,你将需要做更多的配置工作。

答案 1 :(得分:0)

我认为您只需要将Message对象作为控制器处理程序方法的参数传递,并自动进行绑定。您的请求参数字符串必须是这样的:?a=x&b=y&c=z&d=w&e=&f=因为如果您有?param=a&param=b&param=c,那么您的消息对象将需要:

class Message {
    List<String> param; // ends up holding strings "a","b","c",...
}

这不是你想要的(据我所见)。

答案 2 :(得分:0)

您可以在没有任何特殊工作的情况下完成此操作,只需列出您需要的对象,然后Spring会将您的请求参数干净地绑定到您的类实例。