java - 无法读取 JSON:无法构造 `org.club.entities.User` 的实例
问题描述
我试图通过 webSocket 制作一个带有角度(前端)和 Java Springboot 的聊天应用程序,
我的工作场景 有两个实体,第一个是 userEntity,第二个是 messageEntity,它们之间有 OneToMany 关系(用户是 One)和(消息是很多)。让我向您展示我的两个实体:
用户实体
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
.
.
.
.
@JsonIgnore
@OneToMany(mappedBy = "Recievername")
private List<ChatMessage> Recievername;
@JsonIgnore
@OneToMany(mappedBy = "Sendername")
private List<ChatMessage> Sendername;
}
消息实体
public class ChatMessage {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String text;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "Recievername", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
private User Recievername;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "Sendername", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
private User Sendername;
private String avatar;
}
然后这是我的 Message MessageCon的控制器
@Controller
public class ChatController {
// mapped to handle chat messages to the /sendmsg destination
@Autowired
private ChatMessageRepo chat;
@MessageMapping("/sendmsg")
// the return value is broadcast to all subscribers of /chat/messages
@SendTo("/chat/messages")
public ChatMessage chat(ChatMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return chat.save( new ChatMessage(message.getId() , message.getText(), message.getRecievername(), message.getAvatar(), message.getSendername()));
}
}
当我从前面发送消息时,Eclipse 的控制台会显示我发送的消息,但也出现此错误:
Could not read JSON: Cannot construct instance of `org.club.entities.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('mohamed')
堆栈跟踪
Could not read JSON: Cannot construct instance of `org.club.entities.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('mohamed')
at [Source: (byte[])"{"text":"azaz","avatar":"","Sendername":"ADMIN","recievername":"mohamed"}"; line: 1, column: 64] (through reference chain: org.club.entities.ChatMessage["recievername"]); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.club.entities.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('mohamed')
at [Source: (byte[])"{"text":"azaz","avatar":"","Sendername":"ADMIN","recievername":"mohamed"}"; line: 1, column: 64] (through reference chain: org.club.entities.ChatMessage["recievername"])
at org.springframework.messaging.converter.MappingJackson2MessageConverter.convertFromInternal(MappingJackson2MessageConverter.java:234) ~[spring-messaging-5.0.7.RELEASE.jar:5.0.7.RELEASE]
和
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_281]
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.club.entities.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('mohamed')
at [Source: (byte[])"{"text":"azaz","avatar":"","Sendername":"ADMIN","recievername":"mohamed"}"; line: 1, column: 64] (through reference chain: org.club.entities.ChatMessage["recievername"])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63) ~[jackson-databind-2.9.6.jar:2.9.6]
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1342) ~[jackson-databind-2.9.6.jar
解决方案
推荐阅读
- bash - 在 bash 中对所有最近修改的文件运行脚本
- dart - 使用 dart:io 在 dart 中发出 http 请求
- css - Webpack - 使用 mini-css-extract-plugin 设置相对路径
- java - 使用 searchview 过滤时,Recyclerview 不更新数据
- java - 运行/调试配置以红色突出显示普通应用程序的选定主类
- c# - C# 使用 Microsoft 终端服务活动客户端 (RDP) 连接到远程服务器
- typescript - 打字稿没有为“/path/to/file.ts”发出输出
- c# - 导出到 excel 返回空白表
- javascript - 解析 JSON 时出错 - 位置 450 处 JSON 中的意外标记}
- google-cloud-platform - 无法从谷歌云实例中检索文件