Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson反序列化JSON时出现问题_Java_Json_Jackson - Fatal编程技术网

Java 使用Jackson反序列化JSON时出现问题

Java 使用Jackson反序列化JSON时出现问题,java,json,jackson,Java,Json,Jackson,我有这样的想法 {"body":{"result":[{"crossStateId":1,"raceId":181564,"withOfficer":1,"documents":[{"indexed":0,"documentNumber":"zzz","isMain":1,"documentTypeId":6,"serverId":16,"countryId":327,"useDate":"2017-02-07T19:31:51.000+0000","documentSubTypeId":6,"

我有这样的想法

{"body":{"result":[{"crossStateId":1,"raceId":181564,"withOfficer":1,"documents":[{"indexed":0,"documentNumber":"zzz","isMain":1,"documentTypeId":6,"serverId":16,"countryId":327,"useDate":"2017-02-07T19:31:51.000+0000","documentSubTypeId":6,"crossId":5018177,"documentId":44973231,"personId":222,"infinity":0,"documentValid":"2023-08-25T20:00:00.000+0000"}],"directionId":2,"documentNumber":"sss","operatorUsername":"AIRPORT_84","crossDate":"2017-02-07T19:31:51.000+0000","serverId":16,"crossTypeId":1,"crossRegisterDate":"2017-02-07T19:31:52.818+0000","officerNote":"","children":[],"personNote":"","crossId":5018177,"workplaceId":82,"divisionId":2,"race":{"carriageContainer":0,"raceId":181564,"raceStateId":1,"directionId":2,"creatorId":415,"countryId":327,"transportIdByType":605,"raceDateTime":"2017-02-07T19:20:58.000+0000","raceNumber":"841 sss sss","creatorUsername":"AIRPORT_8","divisionId":2,"transportTypeId":3,"createDate":"2017-02-07T19:20:58.000+0000"},"syncState":0,"autos":[],"userId":491,"raceNumber":"841 sss sss","operatorNote":"","person":{"firstNameEn":"JUMBERI","indexed":1,"lastNameGe":"ჩოხელი","genderId":2,"personId":6027803,"personalNumber":"222","countryNameGe":"sss","birthDate":"1963-06-14T20:00:00.000+0000","lastNameEn":"sss","countryId":327,"firstNameGe":"sss"},"airplane":{"raceNumber":"841 sss sss","airCompanyId":1,"airplaneId":605,"airportId":5657,"bortNumber":"01","transportSubTypeId":78,"countryId":360},"underAge":0,"personId":6027803,"decisionId":22}],"total":8264},"errorCode":0}
我想将其反序列化为Java类,但我只对一些JSON字段感兴趣。无论如何,以下是模型类:

public class Response implements Serializable {
    private Body body;
    private long errorCode;

}

public class Body implements Serializable {
    Result result[];
}

public class Result implements Serializable {

    private long crossStateId;
    private long raceId;

    private Person person;
    private Child children [];
    private Auto autos[];

}
等等

但出于某种原因,我得到了以下例外:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 无法识别的字段“body”(Class com.demo.Response),未标记为 在[源代码:java.io]处可忽略。StringReader@6483f5ae;行:1,列: 10] (通过引用链:com.demo.Response[“body”])

下面是代码(JSON字符串被正确接收,格式与我在开头提到的相同):


我将非常感谢您的帮助。

您需要为字段创建getter和setter,并且您应该为字段添加注释

注释:

@JsonProperty(value = "body")
private Body body;
执行上述操作之一将使其正常工作

旁注:


您可以使用从json自动创建POJO。只需将其粘贴并下载,或者使用他们的插件。

您需要为字段创建getter和setter,并且应该为字段添加注释

注释:

@JsonProperty(value = "body")
private Body body;
执行上述操作之一将使其正常工作

旁注:


您可以使用从json自动创建POJO。只需将其粘贴并下载,或使用他们的一个插件。

如其他人所述,
private
字段在默认情况下不会自动检测,因此:

  • @JsonProperty
  • 添加设置器
反序列化需要

但是,还有另一种可能性:您可以使用注释
@JsonAutoDetect
更改所需的最低可见性,并在这里启用所有字段的发现。
或者您甚至可以通过
ObjectMapper
方法(类似于
setVisibility(…)
)更改使用的默认值。

如其他人所述,
private
字段在默认情况下不会自动检测,因此:

  • @JsonProperty
  • 添加设置器
反序列化需要

但是,还有另一种可能性:您可以使用注释
@JsonAutoDetect
更改所需的最低可见性,并在这里启用所有字段的发现。
或者您甚至可以通过
ObjectMapper
方法(类似于
setVisibility(…)
)更改使用的默认值。

您可以告诉Jackson忽略未知属性。对象{result:Array[1],total:8264}类正文中缺少total。@Thomas是的,但在这种情况下Jackson未知哪个属性?将Geter和Setter添加到字段中,可能有助于为所需属性添加@JsonProperty,并为不需要的属性添加@JsonIgnore。您可以告诉Jackson忽略未知属性。对象{result:Array[1],total:8264}类正文中缺少total。@Thomas是的,但在这种情况下Jackson不知道哪个属性?将geter和setter添加到字段中,可能有助于为所需属性添加@JsonProperty,并为不需要的属性添加@JsonIgnore。还添加了此atm:@JsonIgnoreProperties(value={“extra”,“uselessValue”},ignoreUnknown=true)还添加了这个atm:@JsonIgnoreProperties(value={“extra”,“uselessValue”},ignoreUnknown=true)