我正在尝试使用spring的 ObjectMarshallerRegisterer bean注册自定义JSON编组器,如here所述。
我的目的是在编组过程中大写实现某个接口的所有类的每个属性名称。
到目前为止,我已经实现了这个注册为对象marshaller的类:
import grails.converters.JSON
import org.codehaus.groovy.grails.web.converters.exceptions.ConverterException;
import org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshaller;
class MyMarshaller implements ObjectMarshaller<JSON> {
@Override
boolean supports(Object object) {
object instanceof MyInterface
}
@Override
void marshalObject(Object object, JSON json)
throws ConverterException {
def jsonWriter = json.writer
jsonWriter.object()
object.class.metaClass.properties.each {
jsonWriter.key(it.name.capitalize())
def value = object."${it.name}"
if(value == null || value instanceof Boolean ||
value instanceof Number || value instanceof String) {
jsonWriter.value(value)
} else {
// TODO: Fix this
jsonWriter.value(JSON.parse((value as JSON).toString()))
}
}
jsonWriter.endObject()
}
}
此类实际上有效,但我必须插入此行jsonWriter.value(JSON.parse((value as JSON).toString()))
作为快速修复。
好吧,将对象转换为String然后解析它不是一个好策略。必须有一个更好的方法来做到这一点。你能帮助我吗?
感谢。