我有一个休息端点(spring-boot-1.3.0-RELEASE - > spring-core-4.2.4.RELEASE),它接受一个多实例字符串参数
@RequestMapping(value = "/test", method = RequestMethod.GET)
public ResponseEntity<Object> getTest(@RequestParam(value = "testParam", required = false) String[] testParamArray) {}
/test?testParam= => testParamArray has length 0
/test?testParam=&testParam= => testParamArray has length 2 (two empty string items)
我预计第一种情况是在数组中获得一个空的sting元素,但是没有。 关于如何实现这一点的任何想法?
答案 0 :(得分:1)
Spring StringToArrayConverter
负责此次转化。如果您查看其convert
方法:
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
if (source == null) {
return null;
}
String string = (String) source;
String[] fields = StringUtils.commaDelimitedListToStringArray(string);
Object target = Array.newInstance(targetType.getElementTypeDescriptor().getType(), fields.length);
for (int i = 0; i < fields.length; i++) {
String sourceElement = fields[i];
Object targetElement = this.conversionService.convert(sourceElement.trim(), sourceType, targetType.getElementTypeDescriptor());
Array.set(target, i, targetElement);
}
return target;
}
基本上,它需要输入(在您的情况下为空String
),将其拆分为逗号并返回一个数组为爆炸String
的数组。当然,拆分空String
的结果是空的Array
。
当您传递两个具有相同名称的参数时,将调用ArrayToArrayConverter
,其行为与您期望的一样,并返回一个包含两个空String
的数组。
如果您要禁用默认的String
到Array
行为,则应注册另一个Converter
,将空String
转换为单个元素Array