【问题标题】:Spring websocket(stomp, sockjs): Controller didn't get whole dataSpring websocket(stomp,sockjs):控制器没有获得全部数据
【发布时间】:2018-11-02 04:27:31
【问题描述】:

我正在使用 stomp 和 sockjs 更改我的应用程序。

但不知何故,我的控制器无法从客户端获取我的全部数据。

这是来自我的客户方面。

>>> SEND
destination:/app/hello
content-length:57

{"type":"greeting","user":"james","to":"","message":"hi"}�

与我的控制器

@MessageMapping("/hello")
public void greeting(ChatMessage message, SimpMessageHeaderAccessor headerAccessor) throws Exception{
    logger.debug(">>>[GREETING]\n{}", message.toString());

    messagingTemplate.convertAndSend("/topic", message);
}

聊天消息

public class ChatMessage {
private String user;

private String to;

private String message;

private String type;

///

@Override
public String toString(){
    return String.format("ChatMessage [type=" + getType() + ", username="+ getUsername() +", to=" + getToUser() + ", message=" + getMessage() + "]");
}

}

我的控制器只收到 messagetype

我的用户在哪里?

ChatMessage [type=greeting, username=, to=, message=hi]

有人知道我的代码会发生什么吗? 谢谢

【问题讨论】:

  • 映射不正确。更改您的 getter 和 setter 以进行正确的反序列化,或在用户字段顶部使用 @JsonProperty。用户字段的 getter 为 getUsername()。不匹配!

标签: java spring spring-boot spring-websocket stomp


【解决方案1】:

最后我改变了我的模型聊天消息

public class ChatMessage {

private Map<String, Object> map = new HashMap<>();

@JsonAnyGetter
public Map<String, Object> any(){
    return this.map;
}

public Map<String, Object> getMap() {
    return this.map;
}

@JsonAnySetter
public void setMap(String key, Object value) {
    map.put(key, value);
}

@Override
public String toString() {
    return "Map [map=" + map + "]";
}
}

所以我可能会收到不同类型的消息,因为有时我想发送 SDP 消息并提供描述。

【讨论】: