我想将 json 提取为 Play 应用程序中的案例类。case类中的属性在camelCase中定义,json数据在snake_case中。
case class User(userId: Long, userName: String)
和 json 会像这样 {"user_name":"Vishal","user_id":67}
是否有一种简单的方法可以指示 play json 自动进行映射和提取,例如提供一些注释等。
我想将 json 提取为 Play 应用程序中的案例类。case类中的属性在camelCase中定义,json数据在snake_case中。
case class User(userId: Long, userName: String)
和 json 会像这样 {"user_name":"Vishal","user_id":67}
是否有一种简单的方法可以指示 play json 自动进行映射和提取,例如提供一些注释等。
这是一个很老的问题,但我没有找到任何答案,所以我去了 Play JSON Github 存储库并找到了这个:
implicit val config = JsonConfiguration(SnakeCase)
implicit val userReads: Reads[PlayUser] = Json.reads[PlayUser]
所以,现在似乎存在这样做的官方方式
有关此问题的官方解决方案,请参阅@GlauberCampinho 的答案
,
在撰写此答案时尚不存在。
Play 使用杰克逊。在 Java 中,您可以使用属性上的 Jackson 注释org.codehaus.jackson.annotate.JsonProperty
手动设置名称。参数的value
参数将用作键的名称。
@JsonProperty("user_name")
String userName;
我不知道这是否也适用于使用 Scala 的 Play。根据这个线程中关于 Scala 和 Jackson的评论,反序列化的语法应该是这样的:
class User @JsonCreator()( @JsonProperty("user_id") val userId:Long, @JsonProperty("user_name") val userName:String )
您可以在此问题的案例类中找到另一个 Jackson 注释示例。
如果您使用的是 Play 2 的 JSON Inception,那么不。如果您不是,那么您可以只使用 @JsonProperty 注释。
我试图让它与 JSON Inception 一起工作几天,使用各种形式和配置的 jerkson/jackson 注释,但没有这样的运气!
对于 Play Json 2.x:https ://github.com/tototoshi/play-json-naming
这似乎完全满足我正在寻找的东西,希望它有所帮助!