gpt4 book ai didi

class - Grails:JSON 文件中没有 id 和类的 JSONP 回调

转载 作者:行者123 更新时间:2023-12-01 09:00:31 25 4
gpt4 key购买 nike

我正在开发基于 REST 的界面,人们可以在其中获取 json 文件。客户端需要从另一个域访问该文件。我使用到目前为止有效的 jsonp。我的问题是 Grails 中的渲染。目前我使用“as JSON”来编码对象:

render "${params.jsoncallback}(${user as JSON})"

到达客户端的 Json 文件包含所有属性,包括 idclass,我不想在其中包含这些属性。如果不是 jsonp,我会这样做,效果很好:

render(contentType:'text/json'){
userName user.userName
userImage user.userImage
:
:
}

那么在呈现“user as JSON”时如何从 json 中获取 id 和 class 属性呢?有什么想法吗?

最好的问候,克拉斯

最佳答案

您可以通过创建自定义 ObjectMarshaller 来摆脱 JSON 结果中的 class 和 id 属性。

// CustomDomainMarshaller.groovy in src/groovy:
import grails.converters.JSON;
import org.codehaus.groovy.grails.web.converters.ConverterUtil;
import org.codehaus.groovy.grails.web.converters.exceptions.ConverterException;
import org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshaller;
import org.codehaus.groovy.grails.web.json.JSONWriter;
import org.springframework.beans.BeanUtils;

public class CustomDomainMarshaller implements ObjectMarshaller<JSON> {

static EXCLUDED = ['metaClass','class','id','version']

public boolean supports(Object object) {
return ConverterUtil.isDomainClass(object.getClass());
}

public void marshalObject(Object o, JSON json) throws ConverterException {
JSONWriter writer = json.getWriter();
try {
writer.object();
def properties = BeanUtils.getPropertyDescriptors(o.getClass());
for (property in properties) {
String name = property.getName();
if(!EXCLUDED.contains(name)) {
def readMethod = property.getReadMethod();
if (readMethod != null) {
def value = readMethod.invoke(o, (Object[]) null);
writer.key(name);
json.convertAnother(value);
}
}
}
writer.endObject();
} catch (Exception e) {
throw new ConverterException("Exception in CustomDomainMarshaller", e);
}
}
}

您需要在 grails-app/conf/BootStrap.groovy 中注册:

class BootStrap {
def init = { servletContext ->
grails.converters.JSON.registerObjectMarshaller(new CustomDomainMarshaller())
}
def destroy = {}
}

这应该适用于 Grails >= 1.1

关于class - Grails:JSON 文件中没有 id 和类的 JSONP 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1700668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com