如何将YYYY-MM-dd的字符串解析为java.time.LocalDate?目前,我已经尝试了以下方法:


导入JavaTimeSerializers



抛出错误JString无法转换为LocalDate


case class Dates(createdAt: LocalDate, updatedAt: LocalDate, startDate: LocalDate, endDate: LocalDate )
implicit val formats =  defaultFormats ++ org.json4s.ext.JavaTimeSerializers.all

implicit val formats =  defaultFormats ++ org.json4s.ext.JavaTimeSerializers.all

val input =
  """
    |{
    |  "createdAt": "1999-12-10",
    |  "updatedAt": "1999-12-16",
    |  "startDate": "2000-01-02",
    |  "endDate": "200-01-16"
    |}
  """.stripMargin

val result = read[Dates] { input }



覆盖DefaultFormats



引发错误java.time.format.DateTimeFormatter预期的java.text.SimpleDateFormat


implicit val formats = new org.json4s.DefaultFormats {
  override def dateFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd")
}

val input =
  """
    |{
    |  "createdAt": "1999-12-10",
    |  "updatedAt": "1999-12-16",
    |  "startDate": "2000-01-02",
    |  "endDate": "200-01-16"
    |}
  """.stripMargin

val result = read[Dates] { input }



尝试根据此处的示例定义CustomFormatter



错误的预期类型为:(PartialFunction [org.json4s.JValue,java.time.LocalDate],PartialFunction [Any,org.json4s.JValue])


object LocalDateSerializer extends CustomSerializer[LocalDate](
  format => (
{
  case JString(str) => LocalTime.parse(str)
  case JNull => null
}
))

implicit val formats =  org.json4s.DefaultFormats ++ new LocalDateSerializer

最佳答案

对于第三个错误,您缺少第二个部分函数,​​请参见:

ser: Formats => (PartialFunction[JValue, A], PartialFunction[Any, JValue])


所以您可能想要这样做,例如:

  object LocalDateSerializer extends CustomSerializer[LocalDate](format => ({
    case JString(str) =>
      LocalDate.parse(str)
  }, {
    case date: LocalDate => JString(date.toString)
  }))


并且由于LocalDate默认模式是yyyy-MM-dd,因此"200-01-16"这不是合法时间,您可能需要将其更改为2000-01-16

07-26 09:30
查看更多