我有以下GET请求:
/api/search?filter.operation=Ping&filter.namespace=
请注意,参数名称包含前缀(过滤器。操作,过滤器。命名空间)。
然后,我想要使用以下bean来接收这些参数:
class MessageSearchFilter {
String operation;
String namespace;
...
}
处理程序方法具有以下签名:
public @ResponseBody String searchMessages(MessageSearchFilter filter, ...);
然而,这不起作用,因为Spring MVC期望“操作”和“命名空间”属性的命名完全相同。如果我将请求更改为使用'operation'和'namespace'(没有'filter。'前缀),它就可以工作。
有什么方法可以告诉Spring期望参数以'filter'为前缀?
与此相关的一个问题是,如果我的方法签名包含多个具有冲突属性名称的表单对象,会发生什么?
答案 0 :(得分:1)
向控制器添加方法
@Override
protected String getFieldBindingPrefix() {
return "filter.";
}
应该做的。
答案 1 :(得分: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...
}
您还会注意到,您现在应该能够为具有属性名称冲突的其他对象添加限定符。