喷json解析和NullPointerException
Posted
技术标签:
【中文标题】喷json解析和NullPointerException【英文标题】:Spray json parsing and NullPointerException 【发布时间】:2014-03-06 22:50:43 【问题描述】:我有一个错误:
spray.json.ProductFormats$class.productElement2Field NullPointerException
这是我的 json 反序列化代码:
object DomainJsonProtocol extends DefaultJsonProtocol
implicit val loginInfoFormat = jsonFormat(LoginInfo, "userid", "email", "password", "rememberme")
implicit val requestStatusFormat = jsonFormat(RequestStatus, "status", "message")
implicit val requestHolderFormat = jsonFormat(RequestHolder, "requestStatus", "loginInfo")
case class RequestHolder(requestStatus : RequestStatus, loginInfo: LoginInfo)
def this(requestStatus : RequestStatus) = this(requestStatus, null)
case class LoginInfo(userid: Int, email: String, password: String, rememberme: Boolean)
case class RequestStatus(status : Int, message: String)
val requestHolder = content.asJson.convertTo[RequestHolder] //The error is hereHere is
我猜这可能是因为 RequestHolder 类中的构造函数重载。
更新: json内容为:
"requestStatus":"status":0,"message":"","loginInfo":"userid":0,"email":"123","password":"123","rememberme":false
【问题讨论】:
【参考方案1】:我有一个类似的问题,我的问题是由于我定义 jsonreaders 的顺序。我有一个这样的例子:
implicit val multipleThings: RootJsonFormat[Things] = jsonFormat1(Things)
implicit val singleThing: RootJsonFormat[Thing] = jsonFormat1(Thing)
这里Things
案例类有一个Thing
的列表。
这不起作用,因为第一个隐含地需要第二个。像这样重新排序它们:
implicit val singleThing: RootJsonFormat[Thing] = jsonFormat1(Thing)
implicit val multipleThings: RootJsonFormat[Things] = jsonFormat1(Things)
让它工作。
所有感谢:https://***.com/a/29280316/1539208
【讨论】:
这在 2021 年现在甚至很有帮助。我想它应该在编译时被捕获。【参考方案2】:我在官方喷雾邮件列表中找到了解决方案,解决方案是在构造函数中使用 Option[MyClass] = None,而不是使用 null 覆盖构造函数,例如,我的类定义如下:
case class RequestHolder(requestStatus : RequestStatus, loginInfo: Option[LoginInfo] = None)
现在解析工作正常!
【讨论】:
【参考方案3】:我遇到了类似的问题,对我来说是lazyFormat 解决了这个问题:
implicit val requestStatusFormat: JsonFormat[RequestStatus] = lazyFormat(jsonFormat2(RequestStatus))
【讨论】:
以上是关于喷json解析和NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
Error opening session. Cause: java.lang.NullPointerExcept.
Spring JUnit 测试使用 TestContext.retrieveContextLoaderClass(TestContext .java:197) 获取 NullPointerExcept
<WebLogicServer; <BEA-000386; <Server subsystem failed. Reason: java.lang.NullPointerExcept
Maven打包时出现“Show Console View”错误弹出框,错误详情为“An internal error has occurred. java.lang.NullPointerExcept
Maven打包时出现“Show Console View”错误弹出框,错误详情为“An internal error has occurred. java.lang.NullPointerExcept