Grails 转换器 JSON 在实例上编组
Grails converters JSON Marshalling on a Instance
在 Grails JSON 转换器上下文中,希望转换 JSON 作为 MongoDB 查询结果的数据(结果没有关联的域对象)。
其中一个字段需要转换(即具有货币符号的字段需要通过剥离货币符号转换为数字)。
在这种情况下,是否可以仅将编组器应用于此实例数据。
使用:
JSON.registerObjectMarshaller(JSONObject)
全局应用于代码中所有其他位置的所有 JSON对象。
我不希望为此目的创建域对象,并希望使用 grails 转换器对象,例如 JSONObject 等
是的,您可以使用命名编组器轻松实现它。即在 Bootstrap.groovy:
中使用相同的命名空间注册你的编组器
JSON.createNamedConfig("foo") {
it.registerObjectMarshaller(new CustomDataMarshaller)
}
编组器代码:
class CustomDataMarshaller implements ObjectMarshaller<JSON> {
@Override
boolean supports(Object object) {
return object instanceof Currency // Or directly BasicDbObject if you want to marshall the whole MongoDb result
}
@Override
void marshalObject(Object object, JSON converter) throws ConverterException {
// Convert here
}
}
现在仅在您想使用它的地方使用此编组器,即用于任何特定实例或从 MongoDB 调用返回的结果:
class MyController {
def test() {
def data // Any data as you want to marshal
JSON.use("foo") {
respond(data)
// OR
// render(data as JSON)
}
}
}
在 Grails JSON 转换器上下文中,希望转换 JSON 作为 MongoDB 查询结果的数据(结果没有关联的域对象)。
其中一个字段需要转换(即具有货币符号的字段需要通过剥离货币符号转换为数字)。
在这种情况下,是否可以仅将编组器应用于此实例数据。
使用:
JSON.registerObjectMarshaller(JSONObject)
全局应用于代码中所有其他位置的所有 JSON对象。
我不希望为此目的创建域对象,并希望使用 grails 转换器对象,例如 JSONObject 等
是的,您可以使用命名编组器轻松实现它。即在 Bootstrap.groovy:
中使用相同的命名空间注册你的编组器JSON.createNamedConfig("foo") {
it.registerObjectMarshaller(new CustomDataMarshaller)
}
编组器代码:
class CustomDataMarshaller implements ObjectMarshaller<JSON> {
@Override
boolean supports(Object object) {
return object instanceof Currency // Or directly BasicDbObject if you want to marshall the whole MongoDb result
}
@Override
void marshalObject(Object object, JSON converter) throws ConverterException {
// Convert here
}
}
现在仅在您想使用它的地方使用此编组器,即用于任何特定实例或从 MongoDB 调用返回的结果:
class MyController {
def test() {
def data // Any data as you want to marshal
JSON.use("foo") {
respond(data)
// OR
// render(data as JSON)
}
}
}