簡體   English   中英

onWebsocketMessage 期間的運行時異常:如何使用 GSon 在 Java 中讀取我的 JSON 事件數據?

[英]Runtime exception during onWebsocketMessage: How can I read my JSON event data in Java with GSon?

兩天前我開始學習 Java,我決定從我的第一個挑戰開始。 我快到了,但我遇到了下面顯示的異常。

Runtime exception during onWebsocketMessage
java.lang.ClassCastException: class com.google.gson.internal.LinkedTreeMap cannot be cast to class java.lang.String (com.google.gson.internal.LinkedTreeMap is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
        at com.eu.habbo.websockets.WebSocketEventHandler.handleEvent(WebSocketEventHandler.java:29)
        at com.eu.habbo.websockets.WebServer.onMessage(WebServer.java:35)
        at org.java_websocket.server.WebSocketServer.onWebsocketMessage(WebSocketServer.java:673)
        at org.java_websocket.drafts.Draft_6455.processFrameText(Draft_6455.java:885)
        at org.java_websocket.drafts.Draft_6455.processFrame(Draft_6455.java:819)
        at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:379)
        at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:216)
        at org.java_websocket.server.WebSocketServer$WebSocketWorker.doDecode(WebSocketServer.java:1046)
        at org.java_websocket.server.WebSocketServer$WebSocketWorker.run(WebSocketServer.java:1028)
An error occurred on connection /***.**.***.***:58016:java.lang.ClassCastException: class com.google.gson.internal.LinkedTreeMap cannot be cast to class java.lang.String (com.google.gson.internal.LinkedTreeMap is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')

這是我嘗試將 JSON 反序列化為 Java 映射的代碼。

代碼:(WebSocketEventHandler 的 handleEvent 方法):

public void handleEvent(WebSocket socket, String eventJson) {
    Gson gson = new Gson();

    Map<String, String> eventMap = gson.fromJson(eventJson, Map.class);

    String eventName = eventMap.get("event_name"); // line29
    String eventDataAsJson = eventMap.get("event_data");

    System.out.println("eventName: " + eventName);
    System.out.println("eventDataAsJson: " + eventDataAsJson);
}

客戶端代碼(發送 JSON):

{
    'event_name': 'authenticate_with_sso',
    'event_data': {
        'sso_ticket': '**************'
    },
}

首先創建一個映射 POJO 類來存儲您的 JSON 解析值。

嘗試使用此代碼示例使用 Gson 庫解析您的 JSON 數據

GsonBuilder gsonBuilder = new GsonBuilder();
//To handle date data if there is any
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
ParsedObjectInfo info =gsonBuilder.create().fromJson(eventDataAsJson, ParsedObjectInfo.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM