Spring framework REST 多值请求参数空数组
Spring framework REST multivalue request parameter empty array
我有一个休息端点 (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 元素,但有 none。
关于如何实现这一点有什么想法吗?
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
),用 逗号 和 return 一个包含分解值的数组String
。拆分一个空String
的结果当然是一个空Array
。
当您传递两个具有相同名称的参数时,将调用 ArrayToArrayConverter
,其行为与您预期的一样 returns 是一个包含两个空 String
s 的数组。
如果您想禁用默认的 String
到 Array
行为,您应该注册另一个 Converter
将空 String
转换为单个元素 Array
.
我有一个休息端点 (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 元素,但有 none。 关于如何实现这一点有什么想法吗?
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
),用 逗号 和 return 一个包含分解值的数组String
。拆分一个空String
的结果当然是一个空Array
。
当您传递两个具有相同名称的参数时,将调用 ArrayToArrayConverter
,其行为与您预期的一样 returns 是一个包含两个空 String
s 的数组。
如果您想禁用默认的 String
到 Array
行为,您应该注册另一个 Converter
将空 String
转换为单个元素 Array
.