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

jjm*_*tes 9 spring spring-mvc spring-3

我有以下GET请求:

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

请注意,参数名称包括前缀(filter.操作,filter.命名空间).

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

class MessageSearchFilter {
    String operation;
    String namespace;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

但是这不起作用,因为Spring MVC期望"操作"和"命名空间"属性的命名完全相同.如果我将请求更改为使用'operation'和'namespace'(没有'filter.'前缀),它就可以工作.

有什么方法可以告诉Spring期望参数以'filter'为前缀?

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

nic*_*ild 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...
}
Run Code Online (Sandbox Code Playgroud)

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

  • 不过,谢谢,我一直在寻找一种方法来避免自己手动创建和设置 bean 值。我希望这能以某种方式工作,因为 Spring 对嵌套 bean 正确地执行了此操作。 (2认同)