我想更改将枚举编码为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。

09-27 20:15