2015-01-07 11 views
6

Ktoś może mi pokazać, jak konwertować POJO lub instancję klasy do JSON w strukturze Play (szczególnie Play v2.3.x) ze Scala?Jak przekonwertować POJO do JSON w Play framework 2.3.x (Scala)?

Na przykład mam kod jak poniżej:

case class Foo(name: String, address: String) 

def index = Action { 
     request => { 
     val foo = Foo("John Derp", "Jem Street 21") // I want to convert this object to JSON 
     Ok(Json.toJson(foo)) // I got error at here 
     } 
} 

o błędzie:

nie można zapisać wystąpienie com.fasterxml.jackson.data bind.JsonNode do odpowiedzi HTTP. Spróbuj zdefiniować zapisywalny [com.fasterxml.jackson.databind.JsonNode]

UPDATE: dowiedziałem się powyższy błąd jest spowodowany niewłaściwym importu klasy Json, powinno być: import play.api.libs.json.Json. Jednak nadal mam błąd na ukrytym problemie poniżej.

Czytałem this tutorial, ale kiedy próbowałem niejawny kod Writes[Foo]:

implicit val fooWrites: Writes[Foo] = (
     (JsPath \ "name").write[String] and 
      (JsPath \ "address").write[String] 
     )(unlift(Foo.unapply)) 

mam Can't resolve symbol and i Can't resolve symbol unlift błędzie w IntelliJ. Również kod samouczka wygląda na złożony tylko dla konwersji obiektu do JSON. Zastanawiam się, czy istnieje prostszy sposób na zrobienie tego?

Odpowiedz

7

Można uzyskać instancję Writes[Foo] za pomocą Json.writes:

implicit val fooWrites = Json.writes[Foo] 

Mając to ukryte w zakresie jest wszystko, czego potrzeba do konwersji Foo do JSON. Zobacz dokumentację here i here, aby uzyskać więcej informacji o odczytach/zapisach JSON.

+0

Hi, wielkie dzięki. Czy wiesz, gdzie mogę znaleźć prosty przewodnik lub dokumentację na temat korzystania z Json w wersji 2.3? Czy możesz wyjaśnić błąd "Nie można rozwiązać symbolu i" (i "unlift" również) w oryginalnym niejawnym piśmie Próbowałem? (zobacz zaktualizowane pytanie, umieściłem tam kod) – null

+1

Aby rozwiązać błąd symbolu, należy zaimportować 'play.api.libs.functional.syntax._'. Dostarczone przeze mnie linki do dokumentacji powinny odpowiedzieć na twoje pytanie dotyczące 'unlift', a także zawierać wystarczającą ilość ogólnych informacji o Play JSON. – edi

+1

Witam, jeszcze raz bardzo dziękuję za pomoc. Zastanawiam się, dlaczego Intellij nie może wykryć importu. – null

1

Drugi problem - Can't resolve symbol and - to Intellij bug wprowadzony w wersji 1.3 wtyczki Scala. W wersji 1.3.3 wtyczki Scala, jest teraz obejście - zestaw preferencji wyboru:

Języki & szkieletowe> Scala> Rdzeń (domyślnie) tab> używać starych niejawna algorytm wyszukiwania

Powiązane problemy