[英]Spring is flattening 2D JSON array to 1D String array
我正在使用 AJAX 将表单数据发布到 Spring 控制器。 我将一个二维数组附加到我的表单数据中,例如data.push({name: "currentRoles", value: optionsArray});
并尝试将其作为Map<String, String>
接收Map<String, String>
但是我收到错误Resolved [org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: Failed to convert value of type 'java.lang.String[]'
。 出于某种原因,该数组似乎被扁平化为一维数组。 该数组的格式为: {name: "currentRoles", value: Array(2)}
。
完整的JS:
var roles = $(".selectpicker.role");
var optionsArray = [];
$.each(roles, function(index, item){
var testArray = [];
$.each($(roles[index]).find("option:selected"), function(index2, item2){
testArray.push($(item2).val());
});
optionsArray.push(testArray);"name":"currentRoles"}).val(optionsArray);
});
data.push({name: "currentRoles", value: optionsArray});
编辑:尝试将Map<String, String>
更改为Map<String, Object>
,没有区别
我的控制器:
@PostMapping(value="/AdminEditGroup")
public ModelAndView editGroup(@RequestParam String groupName, @RequestParam (required = false) String[] currentMembers,
@RequestParam (required = false) String currentFramework, @RequestParam (required = false) RoleWrapper currentRoles,
@RequestParam String originalName, Model model){}
角色包装器:
public class RoleWrapper {
private Map<String, Object> roleWrapper = new HashMap<String, Object>();
public Map<String, Object> getRoleWrapper() {
return roleWrapper;
}
public void setRoleWrapper(Map<String, Object> roleWrapper) {
this.roleWrapper = roleWrapper;
}
}
编辑:作为 Andreas 回答的扩展,我已将控制器方法更改为以下内容:
@PostMapping(value="/AdminEditGroup", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ModelAndView editGroup(@RequestParam MultiValueMap request, Model model){
logger.info(request.toString());
}
这反过来产生输出: currentRoles=[Student, Teacher, Student, Student,Teacher,Student]
用于 JSON
{
"name": "currentRoles",
"value": [
["Student", "Teacher"],
["Student"]
]
}
信息被复制并再次展平为一维数组。 我怀疑这与 Spring 如何转换表单数据有关。
您发送的 JSON 可能如下所示:
{
"name": "currentRoles",
"value": [
["val1", "val2", "val3"],
["val4", "val5"],
["val6", "val7", "val8", "val9"]
]
}
要接收这种有效负载,您需要将方法定义为:
@PostMapping(value="/AdminEditGroup", consumes="application/json")
public ModelAndView editGroup(@RequestBody Map<String, Object> request, Model model) {
String name = (String) request.get("name");
List<List<String>> = (List) request.get("value");
// code
}
当然,除非您将问题代码中显示的data
包装成更复杂的数据,但由于您尚未共享这些数据,因此我们无能为力。
您应该使用Map<String, Object>
这应该可以正常工作。 您的value
是一个数组,但您试图将其放入 String 中,但这是无法完成的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.