[SCALA] 플레이 프레임 워크 2.X에 포함 된 개체의 암시 JSON의 기록 기능을 구현하는 방법
SCALA플레이 프레임 워크 2.X에 포함 된 개체의 암시 JSON의 기록 기능을 구현하는 방법
두 클래스 푸과 바있다. 푸 바의 필드가 포함되어 있습니다. 어떻게 내가 암시 JSON을 구현합니까되는 문제는 Foo 클래스에 대한 기록?
여기에 코드입니다 :
package models
import play.api.libs.json._
case class Foo(id: String, bar: Bar)
object Foo {
implicit val implicitFooWrites = new Writes[Foo] {
def writes(foo: Foo): JsValue = {
Json.obj(
"id" -> foo.id,
"bar" -> foo.bar
)
}
}
}
case class Bar(x: String, y: Int)
object Bar {
implicit val implicitBarWrites = new Writes[Bar] {
def writes(bar: Bar): JsValue = {
Json.obj(
"x" -> bar.x,
"y" -> bar.y
)
}
}
}
내가 컴파일 할 때, 나는 다음과 같은 오류가 발생합니다 :
내가 models.Bar 클래스에 대한 암시 적 쓰기를 구현하기 때문에 나는이 컴파일러 오류를 이해하지 않습니다. 문제는 여기에 무엇입니까?
해결법
-
==============================
1.그것은 가시성의 질문, 암시 적 쓰기를 [푸] 당신이 암시 글을 바] 그것을 볼 수 제작되지 않은 선언 할 때 :
그것은 가시성의 질문, 암시 적 쓰기를 [푸] 당신이 암시 글을 바] 그것을 볼 수 제작되지 않은 선언 할 때 :
scala> :paste // Entering paste mode (ctrl-D to finish) import play.api.libs.json._ case class Bar(x: String, y: Int) object Bar { implicit val implicitBarWrites = new Writes[Bar] { def writes(bar: Bar): JsValue = { Json.obj( "x" -> bar.x, "y" -> bar.y ) } } } case class Foo(id: String, bar: Bar) object Foo { import Bar._ implicit val implicitFooWrites = new Writes[Foo] { def writes(foo: Foo): JsValue = { Json.obj( "id" -> foo.id, "bar" -> foo.bar ) } } } // Exiting paste mode, now interpreting. import play.api.libs.json._ defined class Bar defined module Bar defined class Foo defined module Foo scala> Json.prettyPrint(Json.toJson(Foo("23", Bar("x", 1)))) res0: String = { "id" : "23", "bar" : { "x" : "x", "y" : 1 } }
당신이 만드는 2.1 재생을 사용하는 경우 또한, 확실히 2.10의 매크로의 브랜드의 새로운 사용을 체크 아웃 : http://www.playframework.com/documentation/2.1.0/ScalaJsonInception
하여 케이스 클래스의 사용과 함께있을 행복 당신이 만약 발 / 바르 'json으로 출력의 키로서 사용되는 이름, BTW, 당신은이 한 라이너를 사용할 수있는 경우와 같이 :
implicit val barFormat = Json.writes[Bar] implicit val fooFormat = Json.writes[Foo]
그것은 당신에게 정확한 상당을 줄 것이다 :
scala> import play.api.libs.json._ import play.api.libs.json._ scala> case class Bar(x: String, y: Int) defined class Bar scala> case class Foo(id: String, bar: Bar) defined class Foo scala> implicit val barWrites = Json.writes[Bar] barWrites: play.api.libs.json.OWrites[Bar] = play.api.libs.json.OWrites$$anon$2@257cae95 scala> implicit val fooWrites = Json.writes[Foo] fooWrites: play.api.libs.json.OWrites[Foo] = play.api.libs.json.OWrites$$anon$2@48f97e2a scala> Json.prettyPrint(Json.toJson(Foo("23", Bar("x", 1)))) res0: String = { "id" : "23", "bar" : { "x" : "x", "y" : 1 } }
from https://stackoverflow.com/questions/15704756/how-to-implement-implicit-json-writes-of-embedded-object-in-play-framework-2-x by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 왜 하나는 프레임 워크 웹 서버 앞에 HTTP 서버를 사용해야합니까? (0) | 2019.11.20 |
---|---|
[SCALA] 스칼라와 기능 시도 및 캐치 (0) | 2019.11.20 |
[SCALA] 왜 검증 모나드 아닌가요? (scalaz7) (0) | 2019.11.20 |
[SCALA] Implicits와 스칼라 기능 리터럴 (0) | 2019.11.20 |
[SCALA] 동시성 가시성 발 대 스칼라 최종 (0) | 2019.11.20 |