我尝试创建交互式应用程序并使用套接字。我通过 Postman 在套接字中发送数据,但SpringBoot无法反序列化它。请帮助)
"我的dto"
public class Event {
@JsonProperty("eventType")
private String eventType;
public Event(String eventType) {
this.eventType = eventType;
}
public String getEventType() {
return eventType;
}
@Override
public String toString() {
return "Event{" +
"eventType='" + eventType + '\'' +
'}';
}
}
控制器
@Controller
public class GameController {
@MessageMapping("/emit")
@SendTo("/topic/events")
public Event emitEvent(Event event) {
return event;
}
}
错误
2022-02-23 16:19:41.359 ERROR 12468 --- [nio-8080-exec-6] s.w.s.s.t.s.WebSocketServerSockJsSession : Broken data received. Terminating WebSocket connection abruptly
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `[Ljava.lang.String;` from Object value (token `JsonToken.START_OBJECT`)
at [Source: (String)"{
"eventType": "TestData"
}"; line: 1, column: 1]
更新1:
1条答案
按热度按时间e5njpo681#
问题是,用你发送请求的工具(我假设是 Postman )你把它作为原始文本发送。所以desirializer期望它是一个简单的String,所以它不能把它转换成复杂的对象。
您应该通知控制器它接收到的是一个Json请求,以便它可以使用正确的
message body reader
解析该请求,并将其转换为Event
对象。为此,请在您的请求中使用以下标题
另外,这里的问题似乎是你用来发送消息的url。这个url似乎不代表应该以
emit
结尾的控制器端点。我认为你直接将请求发送到消息代理而不是应用程序的控制器。