значение null не может быть приведено к ненулевому типу kotlin.Исключение указателя значения строки

#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 .