Springboot不能直接以JSONArray作为参数接收json数组字符串

前端js代码

var initTree =
    [
    {
        "text": "Title/Notes",
        "href": "#TitleNotes"
    },
    {
        "text": "Options",
        "href": "#Options"
    },
    {
        "text": "Climatology",
        "href": "#Climatology"
    },
    {
        "text": "Hydrology",
        "href": "#Hydrology",
        "nodes":[
            {
                "text": "Rain Gages",
                "href": "#RainGages"

            },
            {
                "text": "Subcatchments",
                "href": "#Subcatchments"
            }
        ]
    },
    {
        "text": "Hydraulics",
        "href": "#Hydraulics",
        "nodes": [
            {
                "text": "Nodes",
                "href": "#Nodes",
                "nodes": [
                    {
                        "text": "Junctions",
                        "href": "#Junctions"
                    },
                    {
                        "text": "Outfalls",
                        "href": "#Outfalls"

                    },
                    {
                        "text": "Dividers",
                        "href": "#Dividers"

                    },
                    {
                        "text": "Storage Units",
                        "href": "#StorageUnits"

                    }
                ]
            },
            {
                "text": "Links",
                "href": "#Links",
                "nodes": [
                    {
                        "text": "Conduits",
                        "href": "#Conduits"
                    },
                    {
                        "text": "Pumps",
                        "href": "#Pumps"
                    },
                    {
                        "text": "Orifices",
                        "href": "#Orifices"
                    },
                    {
                        "text": "Weirs",
                        "href": "#Weirs"
                    },
                    {
                        "text": "Outlets",
                        "href": "#Outlets"
                    }
                ]
            },
            {
                "text": "Transects",
                "href": "#Transects"
            },
            {
                "text": "Controls",
                "href": "#Controls"
            }
        ]
    },
    {
        "text": "Quality",
        "href": "#Quality",
        "nodes":[
            {
                "text": "Pollutants",
                "href": "#Pollutants"
            },
            {
                "text": "Land Uses",
                "href": "#LandUses"
            }
        ]
    },
    {
        "text": "Curves",
        "href": "#Curves",
        "nodes":[
            {
                "text": "Control Curves",
                "href": "#ControlCurves"
            },
            {
                "text": "Diversion Curves",
                "href": "#DiversionCurves"
            },
            {
                "text": "Pump Curves",
                "href": "#PumpCurves"
            },
            {
                "text": "Rating Curves",
                "href": "#RatingCurves"
            },
            {
                "text": "Shape Curves",
                "href": "#ShapeCurves"
            },
            {
                "text": "Storage Curves",
                "href": "#StorageCurves"
            },
            {
                "text": "Tidal Curves",
                "href": "#TidalCurves"
            }
        ]
    },
    {
        "text": "Time Series",
        "href": "#TimeSeries"
    },
    {
        "text": "Time Patterns",
        "href": "#TimePatterns"
    },
    {
        "text": "Map Labels",
        "href": "#MapLabels"
    }
];

ajax post到后台:

function makeTree() {
    $.ajax({
        type:"post",
        dataType:'JSON',
        contentType:"application/json;charset=UTF-8",
        // traditional:true,
        async:true,
        url:"/webswmm/loadTree",
        data:JSON.stringify(initTree),
        success:function (newTree) {
            // 获取geojson
            console.log(data);
        }
    });
}

后台代码:

    @RequestMapping(value = "/loadTree",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
    @ResponseBody
    public JSONArray loadTree(@RequestBody JSONArray jsonArray)
    {
        return null;
    }

企图用JSONArray类型的参数直接接收前台的json数组字符串,失败。

解决方法:将js发送的json数组包装一下:

function makeTree() {
    $.ajax({
        type:"post",
        dataType:'JSON',
        contentType:"application/json;charset=UTF-8",
        // traditional:true,
        async:true,
        url:"/webswmm/loadTree",
        data:JSON.stringify({initTree:initTree}),
        success:function (newTree) {
            // 获取geojson
            console.log(data);
        }
    });
}

后台:用JSONObject接收,然后取出JSONArray

    @RequestMapping(value = "/loadTree",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
    @ResponseBody
    public JSONArray loadTree(@RequestBody JSONObject jsonObject)
    {
        JSONArray jsonArray = jsonObject.getJSONArray("initTree");
        return null;
    }

问题解决了,可是不知道为什么?希望路过的大神指点迷津

你可能感兴趣的:(JAVA)