jfinal用config类启动工程无法用fastjson转换,而jetty:run就可以?报错-问答-阿里云开发者社区-阿里云

开发者社区> 爱吃鱼的程序员> 正文

jfinal用config类启动工程无法用fastjson转换,而jetty:run就可以?报错

2020-06-09 14:34:35 267 1

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

这个问题很怪, 我一直用maven的jetty:run来启动工程的, 今天想换成Config.java#main函数的这种启动方式

public static void main(String[] args) {
        JFinal.start("src/main/webapp",20001,"/lzqxl",5);
    }



我的BaseController中有一段renderJson的方法:

public void rendFastJson(Object object) {
        //这个filter将null变为""
        System.out.println(object);
        String json = JSON.toJSONString(object, new JsonValueFilter());
        this.renderJson(json);
    }



方法虽然很土,但是能实现将属性为null转换为"", 因此我的action中的要返回json的时候都是用的renderFastJson而不是jfinal官方的renderJson,我是这么用的

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)



很诡异啊

取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-09 14:34:52

      注意看这句异常: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服务器也没问题
    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144268浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 222980浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 333857浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142132浏览量 回答数 13

110

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 292273浏览量 回答数 110

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146770浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 643105浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145608浏览量 回答数 31

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 136123浏览量 回答数 10

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 471376浏览量 回答数 24
+关注
爱吃鱼的程序员
https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
2
文章
21569
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载