相关疑难解决方法(0)

为抽象类创建Read [T]和Write [T]

我正在为Java类创建ReadsWrites使用Play Framework的JSON库.

我的一个类有一个抽象类字段.

ConcreteObj.java

public class ConcreteObj {

private AbstractObj someField;

public ConcreteObj(AbstractObj someField) {
   this.someField = someField;
}

public AbstractObj getSomeField() { return this.someField };
Run Code Online (Sandbox Code Playgroud)

...

读写

  implicit val ConcreteObjReads: Reads[ConcreteObj] =
    (JsPath \ "someField").read[AbstractObj].map{x: AbstractObj => new ConcreteObj(x)}

  implicit val ConcreteObjWrites: Writes[ConcreteObj] =
    (JsPath \ "someField").write[AbstractObj].contramap{x: ConcreteObj => x.getField}
Run Code Online (Sandbox Code Playgroud)

然而,下一步,创建一个Reads[AbstractObj],对我来说没有意义,因为抽象类无法实例化.

我想这Writes[AbstractObj]看起来像:

implicit val AbstractObjWrites: Writes[AbstractObj] = 
   (JsPath \ "otherField").write[String].contramap{x: AbstractObj => x.getOtherField}
Run Code Online (Sandbox Code Playgroud)

但是Reads[AbstractObj]呢?

java json scala playframework

6
推荐指数
1
解决办法
1366
查看次数

play json写子类给出了模糊隐含值的错误

我正在使用play框架,并有一个抽象类:

 abstract class Base{...}
Run Code Online (Sandbox Code Playgroud)

在伴随对象中有自己的隐式JSON编写器

object Base {
   implicit val baseWrites: Writes[Base] = (...)(unlift(Base.unapply))
}
Run Code Online (Sandbox Code Playgroud)

我是这个抽象类的子类:

case class SubClass{...}
Run Code Online (Sandbox Code Playgroud)

在其伴随对象中也有自己的隐式JSON编写器

object SubClass {
   implicit val subClassWrites: Writes[SubClass] = (...)(unlift(SubClass.unapply))
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用Json.toJson(SubClass)序列化子类对象时,我收到一个错误:

[error]  both value subClassWrites in object SubClass of type => play.api.libs.json.
Writes[models.SubClass]
[error]  and value baseWrites in object Base of type =>        
play.api.libs.json.Writes[models.Base]
[error]  match expected type play.api.libs.json.Writes[models.SubClass]
[error]  Ok(Json.toJson(SubClass.find(id)))
Run Code Online (Sandbox Code Playgroud)

有没有办法消除歧义?

json scala implicits playframework playframework-2.0

3
推荐指数
1
解决办法
2239
查看次数

标签 统计

json ×2

playframework ×2

scala ×2

implicits ×1

java ×1

playframework-2.0 ×1