我尝试创建交互式应用程序并使用套接字。 我通过邮递员在套接字中发送数据,但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:
问题是,使用发送请求的工具(我想是邮递员),您将其作为原始文本发送。因此反序列化器期望它是一个简单的字符串,因此它无法将其转换为复杂的对象。
你应该告知控制器它收到的是一个 Json 请求,这样它就能用正确的
message body reader
解析它,并将其转换为 Event
对象。
为此,请在您发出的请求中使用以下标头
Content-Type: application/json
此外,这里的问题似乎是您用来发送消息的网址。这个 url 似乎并不代表应该以
emit
结尾的控制器端点。我认为您将请求直接发送到消息代理而不是应用程序的控制器。