簡體   English   中英

Spring 將二維 JSON 數組展平為一維字符串數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM