Java GSON 不会反序列化所有字段,即使它们属于同一类型

问题描述 投票:0回答:2

我有课:

public class SentPlayer {
    final String uuid;
    final String playerName;
    final String universeUuid;
/* some get methods and constructors */
}
public class PlayerMsg {
    public final SentPlayer player;
    public final String msg;
/* constructors and such */
}

然后我有这个来自 api 的 JSON:

{
    "player": {
        "uuid": "",
        "playerName": "Rushmore75",
        "universeUuid": "9dae671e-91ed-440e722c12"
    },
    "msg": "1234"
}

但是,当我将所说的 json 反序列化到

PlayerMsg
类时,除
"playerName"
之外的所有字段都反序列化,而
playerName
只是
null
而不是
"Rushmore75"
。我正在使用启用了“serializeNulls”的默认 GSON 配置。使用 gson 2.10

java json gson deserialization json-deserialization
2个回答
0
投票

试试这个:

public class SentPlayer {
    @SerializedName("uuid")
    final String uuid;
    @SerializedName("playerName")
    final String playerName;
    @SerializedName("universeUuid")
    final String universeUuid;
    // constructors and getters
}

0
投票

从两个类的所有字段中删除

final
关键字。它会序列化。

工作示例:

public class SentPlayer {

    String uuid;
    String playerName;
    String universeUuid;

    public String getUuid() {
        return uuid;
    }

    public String getPlayerName() {
        return playerName;
    }

    public String getUniverseUuid() {
        return universeUuid;
    }

    @Override
    public String toString() {
        return "SentPlayer [uuid=" + uuid + ", playerName=" + playerName + ", universeUuid=" + universeUuid + "]";
    }

}

public class PlayerMsg {
    
    public SentPlayer player;
    
    public String msg;

    public SentPlayer getPlayer() {
        return player;
    }

    public String getMsg() {
        return msg;
    }

    @Override
    public String toString() {
        return "PlayerMsg [player=" + player + ", msg=" + msg + "]";
    }
}

@RestController
public class ControllerTest {

    @GetMapping("test")
    public void test(@RequestBody String msg) {
        Gson gson = new GsonBuilder().serializeNulls().create();
        PlayerMsg example = gson.fromJson(msg, PlayerMsg.class);
        System.out.println(example);
    }

}

输出:

PlayerMsg [player=SentPlayer [uuid=, playerName=Anish, universeUuid=123df], msg=1234]
© www.soinside.com 2019 - 2024. All rights reserved.