如何在spring mvc控制器中读取带有多个数组的json?

时间:2016-04-27 08:22:48

标签: java json spring spring-mvc jackson

我将json从ajax发送到包含多个数组的控制器。

Json数据:

{
    "node": [
        {
            "id": "dev_1",
            "blockId": "11"
        },
        {
            "id": "dev_2",
            "blockId": "15"
        }
    ],
    "connect": [
        {
            "id": "con_5",
            "typeId": "2"
        }
    ],
    "name": "test"
}

控制器:

@RequestMapping(value = "/saveBoard", method = RequestMethod.POST)
    public JsonResponse saveBoard(@RequestBody String jsonData) throws IOException {
        JsonResponse response = new JsonResponse();
        ObjectMapper mapper = new ObjectMapper();
        final JsonNode jsonNode = mapper.readTree(jsonData).get("node");

        if(jsonNode.isArray()) {
            for (final JsonNode nodes : jsonNode) {
                System.out.println("jsonNode : "+ nodes);
            }
        }
        return response;
    }

我尝试过使用对象映射器,但没有成功。 在这里,我想为不同的类读取不同的数组,例如节点类的节点和一些指定的字段,连接连接类和字符串用于其他用途。

更新 Contorller:

@RequestMapping(value = "/saveBoard", method = RequestMethod.POST)
    public JsonResponse saveMissionBoard(@RequestBody MissionJsonPojo chartJson) {
        boolean status = false;
        String messsage = "";
        JsonResponse response = new JsonResponse();
        System.out.println("data : " + flowChartJson.getNodes());        
        return response;
    }

Ajax:

 $.ajax({
          url: '<c:url value="/board/saveBoard"/>',
          type: 'POST',
          data: JSON.stringify(chartJson),
          dataType: "json",
          contentType: "application/json",
          success: function(response) {
            console.log("In success");
          },
          error: function (a, b, c) {  }
        });

JSON:

{
    "nodes": [
        {
            "missionDeviceId": "device_1",
            "device": "1",
            "deviceXCoordinate": 79,
            "deviceYCoordinate": 73,
            "blockId": "1##1"
        },
        {
            "missionDeviceId": "device_2",
            "device": "3",
            "deviceXCoordinate": 340,
            "deviceYCoordinate": 146,
            "blockId": "2##5"
        }
    ],
    "connections": [
        {
            "missionConnectionId": "con_5",
            "sourceId": "device_1",
            "targetId": "device_2",
            "device": "2"
        }
    ],
    "name": "test"
}

节点Pojo:

public class Nodes{
    private String missionDeviceId;
    private Integer device;
    private String deviceXCoordinate;
    private String deviceYCoordinate;
    private String blockId; //getters setters
}

连接Pojo:

public class Connections{    
    private String missionConnectionId;
    private String sourceId;
    private String targetId;
    private Integer device; //getters and setters
}

MissionJsonPojo:

public class MissionJsonPojo{
    private List<Nodes> nodes;
    private List<Connections> connections;
    private String name; //getters and setters
}

1 个答案:

答案 0 :(得分:1)

正如@dambros所建议的,创建一个像这样的POJO结构:

public class Node {
    private String id;
    private String blockId;
    //setter-getters.
}

public class Connect {
    private String id;
    private String typeId;
    //setter-getters.
}

import java.util.List;

public class Payload {
    private List<Node> nodes;
    private List<Connect> connects;
    private String name;
    //setter-getters
}

将您的方法签名更改为:

public JsonResponse saveBoard(@RequestBody Payload payload) throws IOException {

}

这可以解决您的问题。