Spring websocket @messagemapping反序列化问题java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换

use*_*141 5 java stomp spring-websocket stompjs

我正在客户端用StompJS编写一个spring websocket应用程序.

在客户端,我打算发送一个对象列表,并在服务器端映射到java对象时,它将自身转换为LinkedHashMap

我的客户端代码是

function stomball() {
         stompClient.send("/brkr/call", {}, JSON.stringify(listIds));
     }
Run Code Online (Sandbox Code Playgroud)

Listids看起来像

[{
    "path": "/a/b/c.txt",
    "id": 12
}, {
    "path": "/a/b/c/d.txt",
    "id": 13
}]
Run Code Online (Sandbox Code Playgroud)

List Id对象看起来像

public class ListId {

    private String path;

    private Long id;

    //getters and setters...
}
Run Code Online (Sandbox Code Playgroud)

控制器看起来像这样

@MessageMapping("/call" )
@SendTo("/topic/showResult")
public RetObj process(List<ListId> listIds) {
   if (!listIds.isEmpty()) {
        for(ListId listId: listIds) {

        }
}
Run Code Online (Sandbox Code Playgroud)

所以我得到一个java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换为com.blah.ListId

然而,当我使用RestMapping使用普通的Spring控制器时,它工作正常,是否有任何弹簧MessageMapping注释将对象映射到java的方式与传统方式不同我不知道为什么不转换为ListID

use*_*141 1

我将它从列表更改为数组并且它有效!这是我所做的

@MessageMapping("/call" )
@SendTo("/topic/showResult")
public RetObj process(ListId[] listIds) {
   if (!listIds.isEmpty()) {
        for(ListId listId: listIds) {

       }
}
Run Code Online (Sandbox Code Playgroud)

感谢这个问题ClassCastException: RestTemplate returned List<LinkedHashMap> 而不是 List<MymodelClass>