我一直在 grails 项目中编写自定义编组器,以便能够从 json 模型中排除某些字段,例如类名。我正在通过引导程序中调用的 spring bean 注册编组器。
尽管我发现大部分编组代码都非常重复,并且这些技术导致编组器过多。
我想知道是否有更通用的方法是始终忽略 JSON 转换中的某些字段,因此我不必总是为所有内容编写自定义编组器。
如何覆盖默认的 groovy JSON 转换器?
如果您使用 InstanceMethodBasedMarshaller,您将能够简单地在每个域类上定义一个 toJSON 方法。这克服了必须注册许多自定义编组器的问题;相反,您将有一个编组员来统治他们。
但是,它只是将创建自定义编组器的负担转移到在每个域类中编写自定义 toJSON() 实现。为了解决这个问题,您可以利用 groovy 类别,这些类别旨在提供跨不相关类的常见行为,即策略模式。就像是:
//Category
class JSONOutputCategory {
static customizeJSON(Object self) {
// do whatever standard thing here
}
}
//Domain
class MyDomain {
...
public void toJSON(JSON json) {
use(JSONOutputCategory){
json.build {
customizeJSON(this)
}
}
}
}
CAVEAT EMPTOR:我根本没有测试过这个,它更像是一个概念而不是一个实现。