Spring 3 MVC -将请求参数与前缀映射到单个bean



我有以下GET请求:

/api/search?filter.operation=Ping&filter.namespace=

请注意参数名包含一个前缀(过滤器)。操作,过滤器。名称空间).

然后,我有下面的bean,我想用它来接收这些参数:

class MessageSearchFilter {
    String operation;
    String namespace;
    ...
}

处理程序方法具有以下签名:

public @ResponseBody String searchMessages(MessageSearchFilter filter, ...);

然而,这不起作用,因为Spring MVC期望"操作"one_answers"命名空间"属性完全像那样命名。如果我改变我的请求使用"操作"one_answers"命名空间"(没有"过滤器"),它就会起作用。"前缀)。

是否有任何方法可以告诉Spring期望参数以'filter'为前缀?

与此相关的一个侧面问题是,如果我有几个表单对象的方法签名与冲突的属性名称会发生什么?

您应该能够使用@RequestParam映射传入的查询字符串参数,并且您可以完全限定它们:

//Your @RequestMapping here...
public @ResponseBody String searchMessages(
  @Requestparam("filter.operation") String filterOperation,
  @RequestParam("filter.namespace") String filterNamespace) {
    MessageSearchFilter messageSearchFilter = new MessageSearchFilter();
    messageSearchFilter.operation = filterOperation;
    messageSearchFilter.namespace = filterNamespace;
    //do your thing here...
}

您还会注意到,您现在应该能够为其他具有属性名称冲突的对象添加限定符。

为控制器添加方法

@Override
protected String getFieldBindingPrefix() {
    return "filter.";
}