如何在spring的java对象中设置从Angular获得的JSON字符串?

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

我正在使用WebSocket制作一个聊天应用程序。

这是我的Angular的代码,用于发送一个 MessageModel 对象转换为JSON字符串后传到后端。

sendMessage(message: MessageModel){
let data = JSON.stringify({
  message: message
})    
this.ws.send("/messaging/"+message.receiverId, {}, data); }

现在我的接收消息的Java代码是。

@MessageMapping("/messaging/{to}")
@SendTo("/inbox/coversation/{to}")
public String processMessageFromClient(@DestinationVariable String to, @Payload String message) throws Exception {
    MessageModel msg = new MessageModel();
    System.out.println(message);

    msg = new Gson().fromJson(message, MessageModel.class);
    System.out.println(msg);

    return message;
}

System.out.println(message)的OUTPUT是::

{"message":{"messageText":"hey","senderId":4,"senderName":"Akash Malhotra","receiverId":1,"senderEmail":"[email protected]","sentTime":"15:19:43 GMT+0530 (India Standard Time)","date":"08/06/2020, 15:19:43"}}

System.out.println(msg)的输出是。

MessageModel [messageText=null, senderName=null, senderId=null, senderEmail=null, profilePicUrl=null, receiverId=null, sentTime=null, date=null]

问题:我正在寻找一种方法来设置从angular收到的 "String message "到java中的MessageModel对象,因为它显示的都是空值。

java angular spring-boot websocket stomp
1个回答
0
投票

TLDR 这工作

public class StackOverflow
{
    public String processMessageFromClient( String to, String message ) throws Exception
    {
        System.out.println( message );

        final MessageWrapper msg = new Gson().fromJson( message, MessageWrapper.class );
        System.out.println( msg.message );

        return message;
    }

    public static void main( String[] args ) throws Exception
    {
        final String jsonString = "{\"message\":{\"messageText\":\"hey\",\"senderId\":4,\"senderName\":\"Akash Malhotra\",\"receiverId\":1,\"senderEmail\":\"[email protected]\",\"sentTime\":\"15:19:43 GMT+0530 (India Standard Time)\",\"date\":\"08/06/2020, 15:19:43\"}}";
        new StackOverflow().processMessageFromClient( "You", jsonString );
    }
}

class MessageModel
{
    String messageText;
    String senderName;
    Integer senderId;
    String senderEmail;
    String profilePicUrl;
    Integer receiverId;
    String sentTime;
    String date;

    @Override
    public String toString()
    {
        // ... etc.
    }
}

class MessageWrapper
{
    MessageModel message;
}

分解。

JSON字符串包含另一个包装器,形式为:

{
    "message" = { /* actual MessageModel contents */ }
}

由于MessageModel不包含一个字段。message,没有设置字段,结果是 null values.将MessageModel包装在另一个类中。MessageWrapper是否 有田 message 类型 MessageModel,使GSON能够递归地解码 MessageModel.


0
投票

在你的方法中传递MessageModel而不是String。Spring将尝试使用底层的jackson(或你为spring设置的自定义映射器)来使用MessageModel类将有效载荷映射到MessageModel对象。

@MessageMapping("/messaging/{to}")
@SendTo("/inbox/coversation/{to}")
public String processMessageFromClient(@DestinationVariable String to, @Payload MessageModel message) throws Exception {
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.