如何在spring中设置java对象中从Angular获取的JSON字符串
我正在使用WebSocket制作聊天应用程序 这是我的Angular代码,用于将如何在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
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)引发异常{
...
}
不客气:)如果此答案有帮助,请将其标记为已接受,以便具有相同问题的其他人可以轻松找到:)不客气:)如果此答案有帮助,请将其标记为已接受,以便具有相同问题的其他人可以轻松找到:)