spring mvc:获取复杂对象的列表

时间:2016-08-02 10:02:39

标签: java spring spring-mvc

我开始绘制字符串集合:

/abc?type=x,y,z

我把它映射到一组枚举

@RequestParam(value = "type") Set<MyEnum> types

现在我想为每种类型添加另一个参数。例如:

/abc?type=x:withProperty1,y:withProperty2,z:withProperty3

理想情况下将其映射到某些容器列表

@RequestParam(value = "type") Set<MyContainer> containers

然后:

class MyContainer {
   MyEnum type
   String property
}

Spring MVC有可能吗?或者我所能做的只是将它绑定到两个不同的列表:

/abc?type=x,y,z&properties=withProperty1,withProperty2,withProperty3

1 个答案:

答案 0 :(得分:0)

如果传递具有相同名称的参数,它将在转到控制器之前转换为数组:

url ... /somethig?type=x&type=y&type=z

在控制器中,您必须将请求参数定义为数组

@requestMapping(value="/something",method=RequestMethod.GET)
public void getTypes(@RequestParam(value = "type") String[] types){
  for(String type : types){
    System.out.print(type + "\t");
  }
}

因此你将拥有

  

x y z

所以在你的情况下你可以使用这个解决方案。

url ... /somethig?type=x&type=y&type=z&property=1&property=2&property=3

控制器中的

@requestMapping(value="/something",method=RequestMethod.GET)
public void getTypes(@RequestParam(value = "type") String[] types,@RequestParam(value = "property") String[] properties){
  for(int i=0;i<types.length();i++){
    MyContainer mc=new MyContainer();
    mc.setType(types[i]);
    mc.setProperty(properties[i]);
  }
}