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

Json4s:不支持方法体中定义的类

朱承载
2023-03-14

我有以下几项:

case class IntPane(
                    override val duration: FiniteDuration,
                    override val values: mutable.Map[String, Int],
                    override val default: Int)
  extends BasePane[Int](duration, values, default)

我可以通过调用writes(),使用以下格式化程序来序列化它们:

implicit val formats: Formats = DefaultFormats +
    FieldSerializer[scala.collection.mutable.Map[String, Int]]() +

但是,我希望忽略一些字段,因此我添加了以下几行:

implicit val formats: Formats = DefaultFormats +
FieldSerializer[scala.collection.mutable.Map[String, Int]]() +
FieldSerializer[IntPane](ignore("duration")) +
FieldSerializer[IntPane](ignore("default"))

现在,序列化失败,出现了这个神秘的异常:

组织。json4s。包$MappingException:不支持在方法体中定义的类。位于组织。json4s。反映套餐$。在组织中失败(package.scala:93)。json4s。反映Reflector$ClassDescriptorBuilder$$anonfun$createConstructorDescriptors$3$$anonfun$15。在组织上应用(Reflector.scala:139)。json4s。反映Reflector$ClassDescriptorBuilder$$anonfun$createConstructorDescriptors$3$$anonfun$15。在scala处应用(反射器。scala:135)。收集TraversableLike$$anonfun$映射$1。在scala处应用(TraversableLike.scala:244)。收集TraversableLike$$anonfun$映射$1。在scala处应用(TraversableLike.scala:244)。收集可变。Resizeablearray$类。scala的foreach(ResizableArray.scala:59)。收集可变。ArrayBuffer。scala的foreach(ArrayBuffer.scala:47)。收集TraversableLike$类。scala的地图(TraversableLike.scala:244)。收集可抽象遍历。地图(transversable.scala:105)位于org。json4s。反映Reflector$ClassDescriptorBuilder$anonfun$createConstructorDescriptors$3。应用(反射器。scala:135)

共有2个答案

徐唯
2023-03-14

不支持在方法体中定义的类。

错误消息指示case类IntPane在方法中定义。

  def myMethod() {
    case class IntPane(...)
  }

如果将IntPane案例类定义移到方法之外,则可以修复该问题。

  case class IntPane(...)

  def myMethod() {
    ...
  }
闾丘照
2023-03-14

我快速尝试了一下,以下方法似乎有效:

val intPaneFieldSerializer = FieldSerializer[IntPane](ignore("duration") orElse ignore("default"))

implicit val formats: Formats = DefaultFormats + FieldSerializer[scala.collection.mutable.Map[String, Int]]() + intPaneFieldSerializer
 类似资料:
  • 我使用S#Arplite开发了webapp,用于构建一个查询,从许多表中获取一个列表。使用NHibernate版本3.3.1.4000 当应用程序运行时,我得到了一个错误,例如 这是我的代码

  • 我正在尝试使用Spring(v.4.1.0)Security(v.3.2.5)保护的访问URL(例如 /user/subscriptions),在提交用户名/密码和csrf令牌后,我收到以下错误: HTTP错误405访问/j\u spring\u security\u检查时出现问题。原因:不支持请求方法“POST” 我有以下配置。网状物xml Spring Security上下文: CustomL

  • 本文向大家介绍让IjkPlayer支持插入自定义的GPU滤镜方法,包括了让IjkPlayer支持插入自定义的GPU滤镜方法的使用技巧和注意事项,需要的朋友参考一下 最近因为工作的原因,需要提供一个将我们的AiyaEffectsSDK插入到IjkPlayer中的示例,就不得不好好看了下IjkPlayer的代码。在IjkPlayer中并没有提供设置自定义GPU滤镜的接口,所以最后只能自己动手,以求丰衣

  • 我有一个这样的用户类: 在LoadDatabase类中,我有: 这给了我这个: 现在,当我给这个命令时,它给我这个: 这很正确,虽然它给我的是电子邮件,而不是电子邮件。 但当我给予 上面写着: 这太可怕了。我正在学习本教程。 这是我的UserController课程: 更新后放置方法: 现在出现了两个问题。 为什么要用电子邮件代替电子邮件,如何用电子邮件代替电子邮件

  • 但我无法将此ejb部署到服务器。 23:05:46,635错误[org.jboss.MSC.service.fail](MSC服务线程1-2)MSC000001:无法启动服务jboss.deployment.unit.“cppro.war”。解析:org.jboss.MSC.service.startjboss.deployment.unit.“cppro.war”中的服务异常。解析:WFlysR

  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道