我想更改将枚举编码为JSON的方式。我目前正在使用默认的grails.converters.JSON(作为JSON),例如在 Controller 中,我使用:
输出为:
"kind":[{"enumType":"FilmKind","name":"DRAMA"},{"enumType":"FilmKind","name":"ACTION"}]
我想删除“enumType”,然后返回:
"kind":["DRAMA","ACTION"]
我正在寻找仍然可以使用的解决方案
因为我不想将每个枚举分别编码。
最佳答案
好吧,除非您想编写自己的JSON转换器,否则编码是这里的最佳方法。原因是因为唯一真正的其他方法是按照Sergio的建议进行操作,因此您必须在需要的地方调用该代码。如果FilmKind是另一个类的属性,那么他的解决方案将根本无法使用。
我会建议Marshallers,这就是我的做法。创建一个名为FilmKindMarsaller的类:
class FilmKindMarshaller {
void register() {
JSON.registerObjectMarshaller(FilmKind) { FilmKind filmKind ->
[
name: filmKind.toString()
]
}
}
}
然后将以下内容添加到您的Bootstrap中:
[ new FilmKindMarshaller() ].each { it.register() }
以上是为了使您可以继续添加所需的每个Marshaller的实例。
现在,只要将FilmKind进行JSON修饰,无论是单独使用还是父类的一部分,只要没有enumType,您都可以获取所需的JSON。