gpt4 book ai didi

java - Spring MVC : WebArgumentResolver to resolve a list of arguments

转载 作者:行者123 更新时间:2023-12-01 11:36:36 25 4
gpt4 key购买 nike

情况

我正在创建一个@RestControllerspring-mvc处理如下 URL:

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

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

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

问题

我尝试使用 WebArgumentResolver但这显然不适用于列表。我现在正在寻找以下方面的建议:

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

要求

Product.class有一个Set<Attribute> attributes因此我不能使用像 /api/products?brand=Audi,Mercedes&sector=Cars 这样的 URL因为这些属性可能会干扰 Product.class 上的属性.

感谢您的帮助和建议。

最佳答案

使用@RequestParam ,您不能绑定(bind)到 List<AttributeValues> 因为泛型类型信息在编译时丢失

但是,您可以绑定(bind)到数组:@RequestParam AttributeValues[] attributes .

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

@Override
public boolean supportsParameter(final MethodParameter parameter) {
return parameter.hasParameterAnnotation(YourCustomAnnotation.class);
}

@Override
public Object resolveArgument(final MethodParameter parameter, final ModelAndViewContainer mavContainer,
final NativeWebRequest webRequest, final WebDataBinderFactory binderFactory) throws Exception {
return ...; // a List
}

关于java - Spring MVC : WebArgumentResolver to resolve a list of arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29915621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com