MBo*_*zic 5 grails json enumeration marshalling
我想改变枚举被编组为JSON的方式.我目前正在使用默认的grails.converters.JSON(作为JSON),例如在我使用的控制器中:
FilmKind.values()为JSON
这个输出是:
"kind":[{"enumType":"FilmKind","name":"DRAMA"},{"enumType":"FilmKind","name":"ACTION"}]
Run Code Online (Sandbox Code Playgroud)
我想删除"enumType"并返回:
"kind":["DRAMA","ACTION"]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个仍然允许我使用的解决方案
作为JSON
因为我不想单独编组每个枚举.
小智 16
如果有人徘徊如何以通用方式将所有枚举值转换为纯字符串值:
class EnumTypeHidingJSONMarshaller {
void register() {
JSON.registerObjectMarshaller(Enum) { Enum someEnum ->
someEnum.toString()
}
}
}
Run Code Online (Sandbox Code Playgroud)
Gre*_*egg 11
因为我不想单独编组每个枚举.
好吧,除非您想编写自己的JSON转换器,否则编组是最好的方法.原因是因为唯一真正的另一种方式是做塞尔吉奥所建议的,你必须在任何你需要的地方调用该代码.如果FilmKind是另一个类的属性,那么他的解决方案根本不会起作用.
我会建议Marshallers,我会这样做.创建一个名为FilmKindMarsaller的类:
class FilmKindMarshaller {
void register() {
JSON.registerObjectMarshaller(FilmKind) { FilmKind filmKind ->
[
name: filmKind.toString()
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后将以下内容添加到Bootstrap中:
[ new FilmKindMarshaller() ].each { it.register() }
Run Code Online (Sandbox Code Playgroud)
以上是你可以继续添加你需要的每个Marshaller的实例.
现在,只要FilmKind是JSON'ified,无论是它自己还是父类的一部分,你都可以得到你想要的JSON,而不是enumType.
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |