Kla*_*aas 3 rest grails jsonp class
我正在开发基于REST的界面,人们可以在其中获取json文件.客户端需要从另一个域访问该文件.我使用到目前为止工作的jsonp.我的问题是Grails中的渲染.目前我使用'as JSON'来编组对象:
render "${params.jsoncallback}(${user as JSON})"
Run Code Online (Sandbox Code Playgroud)
进入客户端的Json文件包含所有属性,包括id和class,我不想在那里.如果它不是jsonp,我这样做,这很好用:
render(contentType:'text/json'){
userName user.userName
userImage user.userImage
:
:
}
Run Code Online (Sandbox Code Playgroud)
那么在将"user as JSON"渲染时,如何从json中获取id和class属性?任何的想法?
最好的问候,克拉斯
您可以通过创建自定义ObjectMarshaller来删除JSON结果中的类和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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在grails-app/conf/BootStrap.groovy中注册:
class BootStrap {
def init = { servletContext ->
grails.converters.JSON.registerObjectMarshaller(new CustomDomainMarshaller())
}
def destroy = {}
}
Run Code Online (Sandbox Code Playgroud)
这应该在Grails> = 1.1中有效
| 归档时间: |
|
| 查看次数: |
3652 次 |
| 最近记录: |