首页 文章

与Scala中的Restful服务交互的良好抽象?

提问于
浏览
1

我想创建表示来回传递给Restful服务的数据结构的对象 .

  • 服务中记录的记录与Scala代码中与之交互的记录之间必须存在明显而直接的关系,例如: obj.id 表示对象的 id 字段 .

  • 我希望能够以声明的方式定义哪些字段构成记录 .

  • 对于每个字段,我希望能够声明属性,如必需/可选,唯一,数据类型,最大长度,最小/最大值,默认值等,就像SQL中表的定义一样

  • obj.json 返回以JSON格式序列化为字符串的对象

  • TypeCompanionObject.fromJson 从JSON字符串返回 obj

  • 我希望能够定义可应用于String类型的任何字段的通用测试用例,或者应用于标记为Required的任何字段等 .

我最初尝试使用一个简单的case类和Genson来进行序列化和反序列化 . 这照顾了要求1,2,4和5.但它并没有让我做3或6 .

什么是满足我所有要求的好模式?

2 回答

  • 0

    我不认为3和6应该是json数据绑定lib的一部分 . 3的最简单的解决方案是在反序列化对象上挂钩 fromJson 某种验证 . 验证可以在案例类的伴随对象内部实现,也可以在案例类实现的一些验证方法中实现,而不需要超级华丽和通用的路径 . 当然,如果您愿意,可以插入一些通用库 .

    还有其他选项可以直接在Genson中插入验证 . 但这对我来说听起来没用 .

  • 0

    我可以通过向字段添加一些自定义注释来尝试达到3 . 我不确定,但我有信心json序列化器/去雾化器应该能够选择那些注释,因此您将能够在运行时检查它们 . 我认为给定方法的一些变化可能会帮助你解决6.我同意eugen,你可能会在数据库中找到类似的东西

    case class Person(
      @Required name: @Required String, age: Int, @Optional gender: Gender
    )
    

相关问题