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

Spray-Json:将泛型类型转换为JsonFormat

贾越
2023-03-14

我有一个类似于Pairs的类。我有一个特性,可以将这个类转换成Json格式。

import scala.reflect.ClassTag
import spray.json._
import spray.json.DefaultJsonProtocol

case class Pairs[K, V](key:K, value: V)

trait Convertor[K, V] extends DefaultJsonProtocol{
  implicit val convertor = jsonFormat2(Pairs[K, V])
}
val p = Pairs[String, Int]("One", 1)
println(p.toJson)

当我使用这个特性时,我得到了以下错误,即对于K和V类型有一个转换器。

错误:找不到类型转换器的证据参数的隐式值。这JF[K]隐式val转换器=jsonFormat2(对[K,V])^

但我怎么能将泛型数据类型引入范围呢。有人能帮我吗?


共有2个答案

傅浩漫
2023-03-14

K和V可以是一切(任何)。由于你没有一个转换器,你必须限制K和V。

case class Pairs[K <: PairKey, V <: PairValue](key:K, value: V)

现在您需要为PairKeyPairValue及其所有子级提供转换器。

您可以在这里找到信息:spray json#jsonprotocol

范福
2023-03-14

您需要为键类型和值类型提供JsonFormat。

此代码

import spray.json.DefaultJsonProtocol._
import spray.json._
case class Pairs[K, V](key: K, value: V)
implicit def pairsFormat[K: JsonFormat, V: JsonFormat] = jsonFormat2(Pairs.apply[K, V])
val p = Pairs[String, Int]("One", 1)
println(p.toJson)

将打印

{"key":"One","value":1}
 类似资料:
  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

  • 我想说得具体一点。我有一个名为Result的类和一个名为Result的派生类 这些类在方法中用作返回类型。为此,我创建了这个helper类: 正如您所看到的,上面的代码对于成功有两种返回类型,一种是如果您不想返回任何东西,另一种是如果您想返回一些东西,但是失败的结果永远不会返回什么东西。这是不必要的,只是一个错误消息。这使我想到以下问题:当我想创建一个可以使用返回类型返回Success,而不使用返

  • 我正在尝试有一个通量通用转换器使用通用类型在Java 8。我把我的代码建立在这个答案的基础上。其思想基本上是实现这个特定的转换器->: 类型转换器->转换为我想要的任何类型。因此,我正在使用构造函数创建一个类型为的类,并返回一个方法。我想在调用上创建类似这样的多个条目:,但类类型不同。但它甚至对整数也不起作用。 当我使用此单元测试进行测试时,我得到错误:。

  • 我正在创建一个由数组支持的泛型类型堆栈。当我尝试创建泛型类型数组时,Java不允许我这样做。有人告诉我,我必须创建一个类型为Object的数组,并将其转换为泛型类型。我已经将对象数组转换为类型,但如何处理Java不断给我的未检查类型错误? 这就是我目前所处的位置。 更新:我正在创建一个对象数组,然后在方法的末尾将返回类型转换为T类型。

  • 在下面来自的语法中,泛型类型参数在实例化原始类型数组后用于类型转换,

  • 我正在修改open JDK以添加特性,我已经遇到了两次,但没有好的解决方案。