使用Play Framework的
JSON库,如何在没有字段的情况下为Java枚举创建读取和写入?
public enum EnumNoFields {
红色,
白色,
蓝色
}
implicit val EnumNoFieldsReads: Reads[EnumNoFields] = ? implicit val EnumNoFieldsWrites: Writes[EnumNoFields] = ?
解决方法
通用解决方案如下所示:
def javaEnumFormat[E <: Enum[E] : ClassTag] = new Format[E] { override def reads(json: JsValue): JsResult[E] = json.validate[String] match { case JsSuccess(value,_) => try { val clazz = implicitly[ClassTag[E]].runtimeClass.asInstanceOf[Class[E]] JsSuccess(Enum.valueOf(clazz,value)) } catch { case _: IllegalArgumentException => JsError("enumeration.unknown.value") } case JsError(_) => JsError("enumeration.expected.string") } override def writes(o: E): JsValue = JsString(o.toString) }
您可以这样使用:
隐式val enumNoFieldsFormat = javaEnumFormat [EnumNoFields]