【发布时间】:2020-11-05 02:20:58
【问题描述】:
我正在使用 AJAX 将表单数据发布到 Spring 控制器。我将一个二维数组附加到我的表单数据中,例如data.push({name: "currentRoles", value: optionsArray});,并尝试将其作为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 如何转换表单数据有关。
【问题讨论】:
-
您为什么认为二维数组或任何与此相关的数组会映射到
String?如果您需要 Java+Spring 代码方面的帮助,请显示代码,至少显示有问题的处理程序方法。 -
当 ajax 将一个数组传递给 spring 时,它不是字符串吗?我所有的 1d JSON 数组都映射到 String[] 数组
-
好的,我再重复一遍:显示代码。我们需要看看您是如何定义 Spring 处理程序方法的,所以编辑问题并向我们展示代码!!
-
老实说,我不知道 Spring 处理程序代码是什么意思,我已经添加了包装器对象和控制器
-
我写评论时不在那里。
标签: javascript java arrays json spring