2015-01-20 16 views
6

Làm theo hướng dẫn từ http://www.smartjava.org/content/first-steps-rest-spray-and-scala, có một số thông báo lỗi không mong muốn. Chuyện gì vậy? Tôi đã xác định JsonWriter tiềm ẩn bởi cuộc gọi implicit val personFormat = jsonFormat3(Person) chưa?Không thể tìm thấy loại lớp JsonWriter hoặc JsonFormat cho trường hợp lớp

scala> import spray.json.DefaultJsonProtocol 
import spray.json.DefaultJsonProtocol 

scala> object MyJsonProtocol extends DefaultJsonProtocol { 
    implicit val personFormat = jsonFormat3(Person) 
} 
    |  | defined object MyJsonProtocol 

scala> case class Person(name: String, fistName: String, age: Long) 
defined class Person 

scala> import spray.json._ 
import spray.json._ 

scala> import MyJsonProtocol._ 
import MyJsonProtocol._ 

scala> Person(name="a", fistName="b", age = 10).toJson 
<console>:45: error: Cannot find JsonWriter or JsonFormat type class for Person 
       Person(name="a", fistName="b", age = 10).toJson 
                ^

Trả lời

6

Từ phiên của bạn, có vẻ như bạn xác định giao thức trước khi khai báo lớp học Person, điều đó có nghĩa là bạn đã có một lớp người khác trong phạm vi. Sau khi xác định giao thức, bạn xác định lại lớp Person, do đó không thể tìm thấy định dạng. Vì vậy, để tổng hợp, hãy chắc chắn rằng bạn lần đầu tiên khai báo lớp học Person của bạn và sau đó xác định định dạng của bạn.

EDIT: Câu trả lời Cập nhật

+0

thử nhiều cách nhập khác nhau, bao gồm các, nhưng được thông báo lỗi vẫn còn đó. Tôi đã chỉnh sửa câu hỏi. – mirelon

+0

Nếu tôi làm phiên mới và khai báo lớp 'Person' trước khi tôi khai báo giao thức, phiên thành công (nó trả về' Person (name = "a", fistName = "b", age = 10) .toJson'). Vì vậy, tôi giả định, rằng bạn thực sự khai báo lớp 'Person' của bạn trước khi bạn khai báo định dạng của bạn? – edi

+0

Bạn nói đúng! Tôi đã thử với các lớp khác nhau và nó hoạt động! Thêm nó vào câu trả lời và tôi sẽ chấp nhận nó ... – mirelon

Các vấn đề liên quan