2014-12-03 4 views
2

У меня случай CalssКак я могу записать даты в формате ISO 8601 с использованием JSON Writes?

import java.sql.Date 
case class GetMilestoneLanguage(
           ... 
        due_date: Option[Date], 
           ... 
        ) 
object GetMilestoneLanguage { 
    implicit val writes = Json.writes[GetMilestoneLanguage] 
} 

Его вывода JSON в UTC - и мне нужно, чтобы это было изо 8601 Я НЕ использовать Joda время.

Какой самый простой способ получить дату в iso 8601?

Благодаря

ответ

7
import play.api.libs.json.{Json, Writes} 
import play.api.libs.json.Writes.dateWrites // do not import everything here, especially DefaultDateWrites 

case class GetMilestoneLanguage(param1: String, dueDate: Option[java.sql.Date]) 

object GetMilestoneLanguage { 
    implicit val customDateWrites: Writes[java.util.Date] = dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'") 

    implicit val writes = Json.writes[GetMilestoneLanguage] 
} 

Ключевым моментом здесь является, чтобы определить собственную неявную Writes[java.util.Date]. Если вы импортируете DefaultDateWrites, ваш customDateWrites будет молча игнорироваться (интересно, почему нет неоднозначного неявного предупреждения).

+1

Вы можете сделать 'import play.api.libs.json.Writes. {DateWrites => _, _ => _}' для импорта всего, кроме 'dateWrites', я думаю. Ваш ответ лучше моего. – Ryan

+0

Спасибо за подсказку! Я не знал этого синтаксиса. – Dimitri

+0

Спасибо - просто собираюсь сфотографировать мой прием здесь - так как он сохраняет плиту котла, используя json write macro helper – brent

1

Вы можете создать собственный Writes[java.util.Date] используя помощника, предусмотренный на объекте Writes компаньона. Однако вы не сможете использовать вспомогательный макрос Json.writes.

import play.api.libs.json._ 
import play.api.libs.functional.syntax._ 
import play.api.libs.json.Writes._ 

case class GetMilestoneLanguage(param1: String, dueDate: Option[Date], param3: String) 

object GetMilestoneLanguage { 
    implicit val writes = (
    (__ \ "param1").write[String] and 
    (__ \ "due_date").write(dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")) and 
    (__ \ "param3").write[String] 
)(unlift(GetMilestoneLanguage.unapply)) 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^