如何从Javax.Websocket上的Websocket订户(客户端)读取json请求?

如何从Javax.Websocket上的Websocket订户(客户端)读取json请求?,websocket,java-websocket,Websocket,Java Websocket,下面是我的Websocket订阅代码 客户端: var request = '{"sessionId": "_fjuhdf896786767", "username":"admin", "status":true}' ws = new WebSocket(wsUri); console.log("registered"); ws.onopen = function() { console.log("connection opened!") ws.send(

下面是我的Websocket订阅代码

客户端:

var request = '{"sessionId": "_fjuhdf896786767", "username":"admin", "status":true}'
ws = new WebSocket(wsUri);
console.log("registered");
    ws.onopen = function() {
        console.log("connection opened!")
        ws.send(request);
    }

    ws.onmessage = function(msg) {
        console.log("received message:");
        window.getData(JSON.parse(msg.data));
    }
在服务器端,websocket的实现如下:

@ServerEndPoint(value="/status")
public class WebsocketServer {

    @OnOpen
    public void OpenMsg(Session session, EndpointConfig cnfg) {

        String retdata = "";
        try {
            if (session.isOpen()) {
                log.info("OpenMsg() payload req data from client"  + decoder);
                retdata = getCount(decoder);
                log.info("OpenMsg() retdata " + retdata);
                session.getBasicRemote().sendText(retdata.toString());
                try {
                  Thread.sleep(pollinterval);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            try {
                session.close();
                log.error("Exception occured while Opening WS Session");
                e.printStackTrace();
            } catch (IOException e1) {
                // Ignore
            }
        }

    }                   
}
我想知道如何从服务器端(javax.websocket)的“ws.send(request);”读取json请求字符串。 我看到了编码器和解码器,但在本例中,我只是将json请求作为字符串发送,而不是如上所示进行编码。
有谁能告诉我,如何在Javax.websocket中将json字符串作为有效负载读取

我想一个简单的JSON阅读器就可以做到:

@OnMessage
public void onMessage(Session session, String message) {
    JsonObject json = Json.createReader(new StringReader(message)).readObject();
    System.out.println("Received json: " + json);
    // or do something more JSON-like:
    // String myField = json.getString("key");
}
编码器和解码器不直接链接到有效负载,而是若您希望直接操作对象。如果您使用的是解码器,那么您的
onMessage
方法可能如下所示

@OnMessage
public void onMessage(Session session, MyMessageClass message){
    String myInput = message.getInput();
    String otherUsefulInformation = message.getInformation();
}
当您使用编码器时,它是关于发送对象而不是纯文本:

@OnMessage
public void onMessage(Session session, MyMessageClass message){
    // process input

    MyAnswerClass answer = new MyAnswerClass(...);
    session.getBasicRemote().sendObject(answer);

    // without encoder, you are bound to use 
    // session.getBasicRemote().sendText(...)
    // or
    // session.getBasicRemote().sendBinary(...)
}

我想一个简单的JSON阅读器就可以做到:

@OnMessage
public void onMessage(Session session, String message) {
    JsonObject json = Json.createReader(new StringReader(message)).readObject();
    System.out.println("Received json: " + json);
    // or do something more JSON-like:
    // String myField = json.getString("key");
}
编码器和解码器不直接链接到有效负载,而是若您希望直接操作对象。如果您使用的是解码器,那么您的
onMessage
方法可能如下所示

@OnMessage
public void onMessage(Session session, MyMessageClass message){
    String myInput = message.getInput();
    String otherUsefulInformation = message.getInformation();
}
当您使用编码器时,它是关于发送对象而不是纯文本:

@OnMessage
public void onMessage(Session session, MyMessageClass message){
    // process input

    MyAnswerClass answer = new MyAnswerClass(...);
    session.getBasicRemote().sendObject(answer);

    // without encoder, you are bound to use 
    // session.getBasicRemote().sendText(...)
    // or
    // session.getBasicRemote().sendBinary(...)
}

确保实现OnMessage接口

@OnMessage
公共无效handleMessage(字符串消息、会话){
//消息将包含您发送的正文内容
}

确保实现OnMessage接口

@OnMessage
公共无效handleMessage(字符串消息、会话){
//消息将包含您发送的正文内容
}

您可以在客户端使用注释“ClientEndPoint”:

@ClientEndpoint(encoders = MessageEncoder.class, decoders = MessageDecoder.class)

use : Session.getBasicRemote().sendObject(message);

class MessageEncoder implements Encoder.Text<Message>
class MessageDecoder implements Decoder.Text<Message>
@ClientEndpoint(encoders=MessageEncoder.class,decoders=MessageDecoder.class)
用法:Session.getBasicRemote().sendObject(消息);
类MessageEncoder实现Encoder.Text
类MessageDecoder实现Decoder.Text
您可以在客户端使用注释“ClientEndPoint”:

@ClientEndpoint(encoders = MessageEncoder.class, decoders = MessageDecoder.class)

use : Session.getBasicRemote().sendObject(message);

class MessageEncoder implements Encoder.Text<Message>
class MessageDecoder implements Decoder.Text<Message>
@ClientEndpoint(encoders=MessageEncoder.class,decoders=MessageDecoder.class)
用法:Session.getBasicRemote().sendObject(消息);
类MessageEncoder实现Encoder.Text
类MessageDecoder实现Decoder.Text

Hello thanking you@ASE,我想在java websocket服务器上以onOpen方法通过“ws.send(msg)”接收javascript客户端发送的消息抱歉,我可能不完全理解您的观点:从
ws.onOpen
发送的消息被
@OnMessage
服务器端捕获,因为连接已经建立。另一方面,如果您通过
@OnOpen
服务器端发送消息,它将由
ws.onmessage
客户端处理你好,谢谢@ASE,我想在OnOpen方法中的java websocket服务器上使用“ws.send(msg)”接收javascript客户端发送的消息抱歉,我可能不完全理解您的观点:从
ws.onopen
发送的消息被
@OnMessage
服务器端捕获,因为连接已经建立。另一方面,如果您通过
@OnOpen
服务器端发送消息,它将由
ws.onmessage
客户端处理