当前位置: 首页 > 知识库问答 >
问题:

@destinationvariable未找到转换器

屠锐
2023-03-14
@MessageMapping("/chat/{usersSelected}")
public void disperseMessage(@DestinationVariable("usersSelected") List<UserSelected> usersSelected) {...

客户端对象如下所示:

vm.usersSelected = [];

var userSelected = {};
userSelected.userId = userId;
userSelected.institutionId = institutionId;
vm.usersSelected.push(userSelected);

我得到以下异常:

org.springframework.core.convert.converterNotFoundException:找不到能够从java.lang.String类型转换为@org.springframework.messaging.handler.annotation.destinationvariable java.util.list类型的转换器

vm.stompClient.send("/app/chat/" + vm.institutionIdOfSender + "/" + vm.userIdOfSender + "/" + vm.usersSelected + "/" + confirmation, {}, JSON.stringify({ 'name': vm.name, 'id': vm.userIdOfSender, 'message': message }));
@MessageMapping("/chat/{institutionIdOfSender}/{userIdOfSender}/{usersSelected}/{confirmation}")
public void disperseMessage(@DestinationVariable("institutionIdOfSender") String institutionIdOfSender,
        @DestinationVariable("userIdOfSender") String userIdOfSender, @DestinationVariable("usersSelected") String usersSelected,
        @DestinationVariable("confirmation") Boolean confirmation, final ChatMessage message) throws Exception {
    @MessageMapping("/chat/{institutionIdOfSender}/{userIdOfSender}/{usersSelected}/{confirmation}/{chatMessageFilter}")
public void disperseMessage(@DestinationVariable("institutionIdOfSender") String institutionIdOfSender,
        @DestinationVariable("userIdOfSender") String userIdOfSender, @DestinationVariable("usersSelected") String usersSelectedString,
        @DestinationVariable("confirmation") Boolean confirmation,
        @DestinationVariable("chatMessageFilter") ChatMessageFilterEnum chatMessageFilter, final ChatMessage message) throws Exception {

    // transfer JSON- string into List- Objects:
    final List<UserSelected> usersSelected = new ObjectMapper().readValue(usersSelectedString,
        new TypeReference<List<UserSelected>>() {});
vm.stompClient.send("/app/chat/" + vm.institutionIdOfSender + "/" + vm.userIdOfSender + "/" + JSON.stringify(vm.usersSelected) + "/" + confirmation + "/SELECTED_USERS", {}, JSON.stringify({ 'name': vm.name, 'id': vm.userIdOfSender, 'message': message }));

我有机会不在服务器上自己转换JSON字符串吗?(这个应该在场景后面做)谢谢你的帮助!

共有1个答案

殳俊晤
2023-03-14

@destinationvariable不引用消息的正文,而是路径中字符串的占位符。

例如(使用与代码相同的模式)

@MessageMapping("/chat/{chatChannel}")
public void disperseMessage(@DestinationVariable("chatChannel") String chatChannel) {...

如果我要向/chat/allchat发送消息,chatChannel的值将是字符串“allchat”

因此,这个错误的意思是它不能将字母“AllChat”转换为列表,因为“AllChat”将不是足够的信息(除非您创建了一个转换器,从一个频道中获取用户列表,这可能不是您想要的,而且作为一项服务可能更有意义)

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

IO有一个关于WebSockets的很棒的Spring Boot教程,该教程展示了一个示例服务,该服务的消息体应该使用可用的json解析器。所以我只是调整了教程中的代码以适合您。

JavaScript

var message = {
    'chatMessage': { 'name': vm.name, 'id': vm.userIdOfSender, 'message': message },
    'usersSelected': vm.usersSelected
}
vm.stompClient.send("/app/chat/" + vm.institutionIdOfSender + "/" + vm.userIdOfSender + "/" + confirmation + "/SELECTED_USERS", {}, JSON.stringify(message));

Java-可以随意将类命名为ChatMessageAndUsersSelected更好的名称

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

@Controller
public class GreetingController {


    @MessageMapping("/chat/{institutionIdOfSender}/{userIdOfSender}/{usersSelected}/{confirmation}/{chatMessageFilter}")
    public void disperseMessage(@DestinationVariable("institutionIdOfSender") String institutionIdOfSender,
        @DestinationVariable("userIdOfSender") String userIdOfSender,
        @DestinationVariable("confirmation") Boolean confirmation, final ChatMessageAndUsersSelected message) throws Exception {
        //Do stuff here.
    }

}
 类似资料:
  • 我正在使用Spring Boot开发一个应用程序,在这里我实现了身份验证和授权。这是我的角色实体 Rold id在BaseModel中。我想从数据库中获取所有角色,为此我在RoleRepository中编写了一个方法,如下所示 但这又让我犯了这个错误 org . spring framework . core . convert . converternotfoundexception:未找到能够

  • 我有这门课: 这个问题: 但我有这个错误

  • 我有3个spring web流——流1、流2、流3。flow2和flow 3已按如下方式指定父flow1: 在流1中,我有一个全局转换和一个结束状态: 在我的应用程序中的某个时刻,在flow2中,子流flow3被称为 ,在流程3中,抛出了一个InvalidPoleyContactException。它在流程1中被正确地找到(因为它的目的是清除货币中断原因()),但后来抛出了一个异常,即在流程2中没

  • 按照Patrick Dubroy的指南,我试图将堆转储转换为J2SE HPROF,但无法执行。这很奇怪,因为它位于文件夹中。 怎么解决这个?

  • 我必须运行一个本机查询来检索要插入到声明它的Jpa存储库以外的模型中的数据,当我执行函数loadValoriPreventivoUnica时,我有以下错误。我该如何解决这个问题?这是由于什么原因? 错误: [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap]键入[

  • 问题内容: 有了这个代码 我得到以下异常 我的猜测是,由于缺少Jackson,该对象无法转换为JSON。我不明白为什么,因为我以为杰克逊内置弹簧靴。 然后我试图将Jackson添加到pom.xml中,但是我仍然遇到相同的错误 我是否需要更改任何Spring Boot属性才能使其正常工作? 谢谢 问题答案: 问题是Foo中的一个嵌套对象没有任何对象