我想创建表示来回传递给Restful服务的数据结构的对象。
服务中记录的记录与Scala代码中与之交互的记录之间必须存在明显且直接的关系,例如: obj.id
表示对象的id
字段。
我希望能够以声明的方式定义哪些字段构成记录。
对于每个字段,我希望能够声明属性,如必需/可选,唯一,数据类型,最大长度,最小/最大值,默认值等,非常类似于a的定义SQL中的表
obj.json
返回以JSON格式序列化为字符串的对象
TypeCompanionObject.fromJson
从JSON字符串返回obj
我希望能够定义可应用于String类型的任何字段的通用测试用例,或者应用于标记为Required等的任何字段。
我最初尝试使用一个简单的case类和Genson来进行序列化和反序列化。这照顾了要求1,2,4和5.但它并没有让我做3或6。
什么是满足我所有要求的好模式?
答案 0 :(得分:0)
我不认为3和6应该是json数据绑定lib的一部分。 3的最简单的解决方案是在反序列化对象上挂钩fromJson
某种验证。验证可以在案例类的伴随对象内部实现,也可以在案例类实现的一些验证方法中实现,而不需要超级华丽和通用的路径。当然,如果您愿意,可以插入一些通用的库。
还有其他选项可以直接在Genson中插入验证。但这对我来说听起来没用。
答案 1 :(得分:0)
我可以尝试通过向字段添加一些自定义注释来达到3。我不确定,但我有信心json序列化器/去雾化器应该能够选择那些注释,因此您将能够在运行时检查它们。我认为给定方法的一些变化可能会帮助你解决6.我同意eugen,你可能会在数据库中找到类似的东西
ToggleButton.OnCheckedChangeListener listener = new ToggleButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton v, boolean isChecked) {
int index;
for(index = 0; index < viewIds.length; index++) {
if (v.getId() == viewIds[index]) {
getSharedPreferences("PREFS_NAME", MODE_PRIVATE)
.edit()
.putBoolean(stringIds[index], isChecked)
.apply();
break;
}
}
}
};