默认情况下,Spring MVC假定需要@RequestParam
。考虑这种方法(在Kotlin中):
fun myMethod(@RequestParam list: List<String>) { ... }
从javaScript传递空列表时,我们将调用类似以下内容的
:$.post("myMethod", {list: []}, ...)
但是,在这种情况下,由于列表为空,因此无法序列化空列表,因此该参数实际上消失了,因此不满足所需参数的条件。人们被迫在required: false
注释上使用@RequestParam
。那不好,因为我们将永远不会收到空列表,而是空的。
是否有一种方法可以强制Spring MVC在这种情况下始终假定为空列表,而不是null
?
答案 0 :(得分:2)
可以使用ObjectMapper进行序列化管理。如果您在Spring MVC中使用杰克逊,则可以执行以下任一操作。
objectMapper.configure(SerializationConfig.Feature.WRITE_EMPTY_JSON_ARRAYS, false);
<bean name="objectMapper" class="org.springframework.http.converter.json.JacksonObjectMapperFactoryBean" autowire="no">
<property name="featuresToDisable">
<list>
<value type="org.codehaus.jackson.map.SerializationConfig.Feature">
WRITE_EMPTY_JSON_ARRAYS</value>
</list>
</property>
答案 1 :(得分:1)
要让Spring为您提供一个空列表而不是null
,请将默认值设置为空字符串:
@RequestParam(required = false, defaultValue = "")
答案 2 :(得分:0)
尝试过吗?
missing
答案 3 :(得分:0)
您可以在控制器中尝试使用WebDataBinder。
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(List.class, "list", new CustomCollectionEditor( List.class, true));
}