#scala #upickle
#scala #upickle
Вопрос:
У меня есть поле, которое может поступать из rest api в виде строки или Int, но когда я его читаю, я всегда хочу прочитать его как строку, т. Е. Если оно поступает как Int, я хочу создать для него toString
case class ZoneList(
someField: Int,
targetField: String
)
object ZoneList {
implicit val rw: ReadWriter[ZoneList] = macroRW
}
targetField
это поле, о котором идет речь
Глядя на http://www.lihaoyi.com/upickle/#CustomPicklers , но все еще не думаю, что у меня достаточно дескриптора для запуска пользовательского средства выбора
Редактировать:
в итоге я сделал это
implicit val anyToStringReader: Reader[Option[String]] =
reader[ujson.Value].map[Option[String]] { j =>
Try(j.toString()).toOption
}
Было бы предпочтительнее, если бы я мог выделить только атрибут targetField, но в моем фактическом классе case много полей, и не думаю, что я смогу это сделать, а также использовать макрос по умолчанию. Если кто-нибудь знает, как, дайте мне знать
Ответ №1:
Решаемая лихаои в upickle gitter:
«если вы хотите выделить этот атрибут, присвойте ему новый тип, который является оболочкой вокруг строки параметров, и напишите свой инструмент выбора для этого типа»