JAVA ObjectNode获取为空

时间:2019-05-07 07:37:52

标签: java json spring spring-boot spring-mvc

我的@RequestBody ObjectNode objectNode中的JSON

<svg viewBox="-12 -12 24 24" width="100">
  <path d="M0,-10 L10,0 0,10" />
</svg>

<svg viewBox="-12 -12 24 24" width="100">
  <path d="M0,-10 L-10,0 0,10" />
</svg>

<svg viewBox="-12 -12 24 24" width="100">
  <path d="M-10,0 L0,-10 10,0" />
</svg>

<svg viewBox="-12 -12 24 24" width="100">
  <path d="M-10,0 L0,10 10,0" />
</svg>

当我这样做时:

{
    "script":
        {"id":2,"nom":"tes","libelleprerequiss":
        [{"id":1,"libelle_prerequis":"Soc devis VAM","produit":{"id":1,"nom":"VAM"},"typologie":{"id":1,"nom":"devis"}}]
        },
    "libellePrerequis":
        {"id":3,"libelle_prerequis":"Soc contrat VAM","produit":{"id":1,"nom":"VAM"},"typologie":{"id":2,"nom":"contrat"}
        }
}

我有一个结果:

    String id_script = objectNode.get("script").get("id").asText();
    String id_libelleprerequis = objectNode.get("libellePrerequis").get("id").asText();
    System.out.println("Script ID = " + id_script + "...");
    System.out.println("Libelle Prerequis ID = " + id_libelleprerequis + "...");

但是当我这样做时:

Update Script - Script ID = 2...
Update Script - Libelle Prerequis ID = 3...

我有:

String libelleprerequis = objectNode.get("libellePrerequis").asText();
System.out.println("Update Script - Libelle Prerequis = " + libelleprerequis + "...");

我想恢复我的“ LibellePrerequis”以将其集成到我实体中的脚本中(很多)。

1 个答案:

答案 0 :(得分:1)

"libellePrerequis"是一个对象。

asText()仅在您的节点为值时才有效。

您可以使用objectNode.get("libellePrerequis").isValueNode();

进行检查

要将节点对象获取为String,您需要使用toString()

objectNode.get("libellePrerequis").toString();

EDIT1:

要将节点转换为对象,您需要创建一些代表节点树的对象。

public class Libell{

    private int id;
    private String libelle_prerequis;
    private Produit produit;
    private Typologie typologie;

    //getters, setters

}

public class Typologie{

    private int id;
    private String nom;

    //getters, setters

}

public class Produit{

    private int id;
    private String nom;

    //getters, setters

}

最重要的是,属性(id, libelle_prerequis, ...)的名称应与json中的名称相同,并注意其类型。因此,对象的名称(LibellTypologieProduit)的结构与json中的结构无关。

现在,要将您的JSonNode映射到一个对象,您可以执行以下操作:

ObjectMapper objMap = new ObjectMapper();

Libell libell = objMap.convertValue(objectNode.get("libellePrerequis"), Libell.class);

System.out.println(libell.getId());
System.out.println(libell.getProduit().getId());
System.out.println(libell.getTypologie().getId());