Spring MVC:WebArgumentResolver来解析参数列表

时间:2015-04-28 09:33:50

标签: java spring spring-mvc

场合

我正在使用@RestController创建spring-mvc来处理以下网址:

/api/products?attributes=brand:Audi,Mercedes&attributes=sector:Cars&...

我想在相应的方法中提取@RequestParam List<AttributeValues> attributes

AttributeValues.class确实有一个String nameSet<String> values,稍后会用它来检索与此查询匹配的产品。

问题

我尝试使用WebArgumentResolver,但这显然不适用于列表。我正在寻找有关的任何建议:

  • 如何为列表实现自定义解析器(同一个参数的多个值)?
  • 是否有更好的解决方案来构建这种用例的(REST)URL(同样,同一参数的多个值)?我可以改变格式。

要求

Product.classSet<Attribute> attributes,因此我无法使用/api/products?brand=Audi,Mercedes&sector=Cars等网址,因为这些属性可能会干扰Product.class上的属性。

感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:1)

使用@RequestParam,您无法绑定到List<AttributeValues> ,因为编译时会丢失泛型类型信息

但您可以绑定到数组:@RequestParam AttributeValues[] attributes

如果你真的想要List,另一种可能性是使用自定义注释并实现HandlerMethodArgumentResolver来检查参数是否具有该注释,并将参数解析为{{1 }}

List