2014-02-07 10 views
0

Salat을 사용하여 mongodb 컬렉션에 대한 스칼라 클래스를 사용하고 있습니다. 테스트 케이스에서 json 문자열을 비 직렬화하려고했습니다. 그러나 날짜 유형의 형식에 대한 예외가 발생합니다. Salat DAO를 사용하여 객체를 가져 오는 데 문제가 없습니다. 그러나 그것을 테스트 할 때, 그것은 나에게 오류를 주었다. 몽고 수집스칼라 java.util.date 형식을 deserialize하지 못했습니다.

클래스

case class MemberData(
    id: ObjectId = new ObjectId, 
    memberId: String, 
    anotherDate: Date = new Date() 
) 

object MemberData extends MemberDataDAO with MemberDataJson 

trait MemberDataDAO extends ModelCompanion[MemberData, ObjectId] { 
    def collection = mongoCollection("member_data") 
    val dao = new SalatDAO[MemberData, ObjectId](collection) {} 
} 

trait MemberDataJson { 
    implicit val memberDataJsonWrite = (
    (__ \ "id").write[ObjectId] ~ 
    (__ \ "memberId").write[String] ~ 
    (__ \ "anotherDate").write[Date](Writes.dateWrites("yyyy-MM-dd HH:mm:ss")) 
    )(unlift(MemberData.unapply)) 
    implicit val memberDataJsonRead = (
    (__ \ 'id).read[ObjectId] ~ 
    (__ \ 'memberId).read[String] ~ 
    (__ \ 'anotherDate).read[Date](Reads.dateReads("yyyy-MM-dd HH:mm:ss")).orElse(Reads.pure(new Date())) 
)(MemberData.apply _) 
} 

테스트 케이스 실패 :

val memberDataJsObj = Json.obj(
     "id" -> _id.toString, 
     "memberId" -> "1", 
     "anotherDate" -> updateDateStr 
    ) 
val toJsonStr = Json.stringify(memberDataJsObj) 
assert(MemberData.fromJSON(toJsonStr) == memberData) 

이유 :

! Invalid format: "2014-02-07 09:27:21" is malformed at " 09:27:21" 

답변

1

역 직렬화 할 날짜의 텍스트 형식을 지정하는 StringDateStrategy을 사용하도록 Context#jsonConfig#dateStrategy을 구성해야합니다 ("yyyy-MM-dd HH:mm:ss").