Spring 在@RequestParam中将空的不可变集合作为defaultValue
Spring不接受Spring 在@RequestParam中将空的不可变集合作为defaultValue,spring,spring-mvc,Spring,Spring Mvc,Spring不接受@RequestParam的defaultValue中的非常量值,这真是令人恼火。我想为集合返回一个空的不可变集合。有什么好的解决方法吗?我会从以下内容开始: 在DispatcherServlet的配置文件中,您需要注册自己的ArgumentResolver,如您所述: <annotation-driven> <argument-resolvers> <beans:bean class="com.foo.ba
@RequestParam
的defaultValue
中的非常量值,这真是令人恼火。我想为集合返回一个空的不可变集合。有什么好的解决方法吗?我会从以下内容开始:
在DispatcherServlet
的配置文件中,您需要注册自己的ArgumentResolver
,如您所述:
<annotation-driven>
<argument-resolvers>
<beans:bean class="com.foo.bar.CustomListWebArgumentResolver" />
</argument-resolvers>
</annotation-driven>
基本上,在自定义解析器中,您可以获得RequestMappingHandlerAdapter
,它引用了Spring定义的所有默认参数解析器。您正在查找的是RequestParamMethodArgumentResolver
。一旦获得该作业,如果该参数的值不为null且不为空,则将该作业传递给默认参数解析程序
在上面的supportsParameter
方法中,我假设一个通用列表作为RequestParam
处理:
public String home(@RequestParam(defaultValue = "") List myList, ...) {
...
}
此外,我认为您需要一个自定义配置,以使您的自定义冲突解决程序在默认冲突解决程序之前得到考虑:
@Configuration
public class MyCustomWebConfiguration {
private @Inject RequestMappingHandlerAdapter adapter;
@PostConstruct
public void prioritizeCustomArgumentMethodHandlers () {
List<HandlerMethodArgumentResolver> argumentResolvers = new ArrayList(adapter.getArgumentResolvers ());
List<HandlerMethodArgumentResolver> customResolvers = adapter.getCustomArgumentResolvers ();
argumentResolvers.removeAll(customResolvers);
argumentResolvers.addAll(0, customResolvers);
adapter.setArgumentResolvers(argumentResolvers);
}
}
@配置
公共类MyCustomWebConfiguration{
私有@InjectRequestMappingHandlerAdapter适配器;
@施工后
公共void优先级CustomArgumentMethodHandler(){
List argumentResolvers=newarraylist(adapter.getArgumentResolvers());
列出CustomResolver=adapter.getCustomArgumentResolver();
ArgumentResolver.removeAll(CustomResolver);
ArgumentResolver.addAll(0,CustomResolver);
adapter.SetArgumentResolver(ArgumentResolver);
}
}
那不是弹簧。一般来说,这是Java注释。是的,但实际上我可以连接到Spring RequestArgumentResolver,检查“”并返回一个空集合。我认为Collections.empty_LIST是一个可以用于此目的的常量集合。Collections.empty_LIST
是一个静态方法,如果您定义自己的ArgumentResolver,如何涵盖实际集合(非空或非空值)作为参数传递的场景?
@Configuration
public class MyCustomWebConfiguration {
private @Inject RequestMappingHandlerAdapter adapter;
@PostConstruct
public void prioritizeCustomArgumentMethodHandlers () {
List<HandlerMethodArgumentResolver> argumentResolvers = new ArrayList(adapter.getArgumentResolvers ());
List<HandlerMethodArgumentResolver> customResolvers = adapter.getCustomArgumentResolvers ();
argumentResolvers.removeAll(customResolvers);
argumentResolvers.addAll(0, customResolvers);
adapter.setArgumentResolvers(argumentResolvers);
}
}