@JFinal 你好,想跟你请教个问题:
这个问题很怪, 我一直用maven的jetty:run来启动工程的, 今天想换成Config.java#main函数的这种启动方式
public static void main(String[] args) { JFinal.start("src/main/webapp",20001,"/lzqxl",5); }
public void rendFastJson(Object object) { //这个filter将null变为"" System.out.println(object); String json = JSON.toJSONString(object, new JsonValueFilter()); this.renderJson(json); }
if (lawyer == null) { rendFastJson(JsonResult.build(ErrCode.USERNAME_AUTH_ERROR)); return; }
那么问题来了, 今天我心血来潮换下工程的启动方式, 就报错了:
java.lang.ClassCastException: com.app.common.web.json.JsonResult cannot be cast to com.app.common.web.json.JsonResult at com.alibaba.fastjson.serializer.ASMSerializer_1_JsonResult.writeNormal(Unknown Source) at com.alibaba.fastjson.serializer.ASMSerializer_1_JsonResult.write(Unknown Source) at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:266) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:562) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:500) at com.app.common.web.BaseController.rendFastJson(BaseController.java:75) at com.app.sign.SignInController.auth(SignInController.java:81) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497)
注意看这句异常:com.app.common.web.json.JsonResultcannotbecasttocom.app.common.web.json.JsonResult,很明显,从字面上看是完全同一个类JsonResult,但本质上不是同一个,因为你的eclipse设置的输出路径并不是WEB-INF/classes,导致了tomcat或jetty启动的时候用的自己的类加载器加载了一次WEB-INF/classes下的类,而在别处对JsonResult引用时,另一个类加载器再加载了一次JsonResult,造成了看似相同的类型出现类型转换错误。改下eclipse的classes输出路径即可
此外,定制json转换的行为,没必要这么麻烦,只需要扩展一下IJsonFactory,然后me.setJsonFactory(...)换成自己的JsonFactory实现即可彻底一次性地切换到自己喜欢的json实现
回复 @JFinal:那我用你的方式启动的话,要改什么配置啊,我用的IDEA回复 @错觉:意思就是启动过程与运行过程使用了不同的类加载器啥意思?我用你文档里面的Config.java#main启动工程才有问题,用我maven配置的嵌入式jetty没问题的,用外部的tomcat服务器也没问题版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。