Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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
如何在spring中设置java对象中从Angular获取的JSON字符串_Java_Angular_Spring Boot_Websocket_Stomp - Fatal编程技术网

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

如何在spring中设置java对象中从Angular获取的JSON字符串,java,angular,spring-boot,websocket,stomp,Java,Angular,Spring Boot,Websocket,Stomp,我正在使用WebSocket制作聊天应用程序 这是我的Angular代码,用于将MessageModel对象转换为JSON字符串后发送到后端 sendMessage(message: MessageModel){ let data = JSON.stringify({ message: message }) this.ws.send("/messaging/"+message.receiverId, {}, data); } 现在,我接收消息的Java代码是: @MessageMa

我正在使用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":{"messageText":"hey","senderId":4,"senderName":"Akash Malhotra","receiverId":1,"senderEmail":"aku@gmail.com","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接收的“字符串消息”设置为java中的MessageModel对象,因为它显示了所有空值。

TL/DR这是有效的 细分: JSON字符串包含另一个包装器,形式如下:

{
    "message" = { /* actual MessageModel contents */ }
}
由于MessageModel不包含字段
message
,因此未设置任何字段,从而导致
null
值。 将MessageModel封装在另一个类
MessageWrapper
中,该类具有类型为
MessageModel
的字段
message
,允许GSON递归解码
MessageModel

TL/DR,这样做有效 细分: JSON字符串包含另一个包装器,形式如下:

{
    "message" = { /* actual MessageModel contents */ }
}
由于MessageModel不包含字段
message
,因此未设置任何字段,从而导致
null
值。
将MessageModel封装在另一个类
MessageWrapper
中,该类具有类型为
MessageModel
的字段
message
,允许GSON递归解码方法中的
MessageModel
而不是字符串。Spring将尝试使用底层jackson(或您为Spring设置的自定义映射器)使用MessageModel类将负载映射到MessageModel对象

@MessageMapping(“/messaging/{to}”)
@发送到(“/inbox/coversation/{to}”)
公共字符串processMessageFromClient(@DestinationVariable String to,@Payload MessageModel message)引发异常{
...
}

在方法中传递MessageModel,而不是字符串。Spring将尝试使用底层jackson(或您为Spring设置的自定义映射器)使用MessageModel类将负载映射到MessageModel对象

@MessageMapping(“/messaging/{to}”)
@发送到(“/inbox/coversation/{to}”)
公共字符串processMessageFromClient(@DestinationVariable String to,@Payload MessageModel message)引发异常{
...
}
不客气:)如果此答案有帮助,请将其标记为已接受,以便具有相同问题的其他人可以轻松找到:)不客气:)如果此答案有帮助,请将其标记为已接受,以便具有相同问题的其他人可以轻松找到:)