10

我有以下 GET 请求:

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

请注意参数名称包含前缀(filter.operation , filter.namespace)。

然后,我想使用以下 bean 来接收这些参数:

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

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

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

但是,这不起作用,因为 Spring MVC 期望 'operation' 和 'namespace' 属性的命名完全一样。如果我将请求更改为使用“操作”和“命名空间”(没有“过滤器”前缀),它会起作用。

有什么方法可以告诉 Spring 期望参数以“过滤器”为前缀?

与此相关的一个附带问题是,如果我的方法签名包含多个具有冲突属性名称的表单对象,会发生什么?

4

2 回答 2

0

您应该能够使用 映射传入的查询字符串参数@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...
}

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

于 2011-10-24T15:08:32.737 回答
0

将方法添加到您的控制器

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

应该做的工作。

于 2011-12-09T14:43:53.403 回答