#spring-boot #kotlin
#пружинный ботинок #котлин
Вопрос:
Я объявляю ненулевое значение в своем классе сущностей, но когда я обращаюсь к этим переменным, я получаю NullPointerException
. Я сталкиваюсь со следующим типом ошибки:
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String at com.nilmani.chatdemochat.controller.ChatController.addUser(ChatController.kt:31) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na] at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:569) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:511) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:94) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:524) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:458) ~[spring-messaging-5.3.13.jar:5.3.13] at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.13.jar:5.3.13] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
ChatMessage.kt
package com.nilmani.chatdemochat.model import com.nilmani.chatdemochat.enum.MessageType data class ChatMessage ( var messageType: MessageType?=null, val content:String="", var sender:String="")
ChatController.kt
@MessageMapping("/chat/{roomId}/addUser") fun addUser(@DestinationVariable roomId: String,@Payload chatMessage: ChatMessage,messageHeader:SimpMessageHeaderAccessor){ val currentRoomId: String = messageHeader.sessionAttributes?.put("roo_id",roomId) as String if (currentRoomId != null){ val leaveMessage = ChatMessage() leaveMessage.messageType = MessageType.LEAVE leaveMessage.sender = chatMessage.sender messageingTemplate.convertAndSend(format("/channel/%s",currentRoomId),leaveMessage) } messageHeader.sessionAttributes?.set("username", chatMessage.sender) messageingTemplate.convertAndSend(format("/channel/%s",roomId),chatMessage) }
Я добираюсь NullPointerException
до этой строки:
val currentRoomId: String = messageHeader.sessionAttributes?.put("roo_id",roomId) as String
При присоединении к другому пользователю для общения в чате он выдает ошибку такого типа, и вновь введенный пользователь не может подключиться к приложению чата.
Ответ №1:
Результат messageHeader.sessionAttributes?.put("roo_id",roomId)
есть null
, но вы пытаетесь привести его к ненулевой строке.
Таким образом, либо messageHeader.sessionAttributes
есть null
, либо результат put("roo_id",roomId)
равен нулю.
Комментарии:
1. Либо
messageHeader.sessionAttributes
естьnull
, либоroomId
естьnull
.