开发者社区> 问答> 正文

jfire-codejson 输出jfinal model报错?报错

@eric_jfire 你好,想跟你请教个问题:

最近看到您新出的codejson框架, 性能目前果然是傲视群雄呀。。 准备在项目中应用,但是出现了一些问题!我的项目是采用jfinal, 在用codejson输出jfinal model时出错!

java.lang.IllegalAccessError: tried to access class java.util.HashMap$Node from class JsonWriter_Node_37709549281918
	at JsonWriter_Node_37709549281918.write(JsonWriter_Node_37709549281918.java)
	at link.jfire.codejson.function.WriterContext.write(WriterContext.java:103)
	at JsonWriter_PiracyInfo_37709515503292.write(JsonWriter_PiracyInfo_37709515503292.java)
	at link.jfire.codejson.function.WriterContext.write(WriterContext.java:103)
	at link.jfire.codejson.function.impl.write.extra.ArrayListWriter.write(ArrayListWriter.java:28)
	at link.jfire.codejson.function.WriterContext.write(WriterContext.java:103)
	at link.jfire.codejson.JsonTool.write(JsonTool.java:28)



没有权限访问model 里的attrs属性?
public abstract class Model<M extends Model> implements Serializable {
	
	private static final long serialVersionUID = -990334519496260591L;
	
	/**
	 * Attributes of this model
	 */
	private Map<String, Object> attrs = getAttrsMap();	// getConfig().containerFactory.getAttrsMap();	// new HashMap<String, Object>();
	
	private Map<String, Object> getAttrsMap() {
		Config config = getConfig();
		if (config == null)
			return DbKit.brokenConfig.containerFactory.getAttrsMap();
		return config.containerFactory.getAttrsMap();
	}



@ModelSign
public class PiracyInfo extends BaseModel<PiracyInfo> {

    public static PiracyInfo dao = new PiracyInfo();
    
}



请问这个有办法解决吗? 谢谢!

展开
收起
爱吃鱼的程序员 2020-06-10 15:35:21 456 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    能不能贴出更完善一些的代码?

    codejson输出采用的是属性的get方法。也就是说要输出的属性至少要有一个无参的get方法才能输出。但是我在你的代码中似乎没有看到?

    回复 @三千水军保档:可能我没看的太明白。是不是这个类中还有其他的属性。那这样的话,在输出策略中,使用writeStratege.addIgnoreField("com.XX.fieldName")这样的方式可以忽略指定的属性即可。注意该属性是标准get方法中抽离出来的。回复 @eric_jfire:嗯嗯,好的,谢谢呀!如果说我这里只想输出Model里面的attrs这个集合!codejson策略方式能实现吗?回复 @三千水军保档:是的。codejson输出采用的符合JavaBean规范的get方法。也即是说,第一无参,第二访问类型为public。如果是protected按理来说是直接忽略的,可能是我的bug。我回头再检查下。感谢您的回答!请看楼下代码!Jfinal将查询结果集封装到一个Map集合里面,但是只提供了一个protected的get方法供子类使用,所以codeJson没权限访问Map!不知道我理解的对不对?
    PiracyInfo: publicclassPiracyInfoextendsBaseModel<PiracyInfo>{publicstaticPiracyInfodao=newPiracyInfo();}

    BaseModel:


    publicabstractclassBaseModel<MextendsModel>extendsModel<M>{}



    Model:



    privateMap<String,Object>attrs=getAttrsMap();protectedMap<String,Object>getAttrs(){returnattrs;}

    PiracyInfoServiceImpl:


    publicStringgetAllPiracyInfo(){List<PiracyInfo>list=PiracyInfo.dao.find("selectrtrim(JMGN_Code)jmgCode,rtrim(fileSuffix)fileSuffixfromPiracyInfo");returnJsonTool.write(list);}








    2020-06-10 15:35:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Wicket User Guide - Ref 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载