Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在@RequestParam中将空的不可变集合作为defaultValue_Spring_Spring Mvc - Fatal编程技术网

Spring 在@RequestParam中将空的不可变集合作为defaultValue

Spring 在@RequestParam中将空的不可变集合作为defaultValue,spring,spring-mvc,Spring,Spring Mvc,Spring不接受@RequestParam的defaultValue中的非常量值,这真是令人恼火。我想为集合返回一个空的不可变集合。有什么好的解决方法吗?我会从以下内容开始: 在DispatcherServlet的配置文件中,您需要注册自己的ArgumentResolver,如您所述: <annotation-driven> <argument-resolvers> <beans:bean class="com.foo.ba

Spring不接受
@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);
    }
}