Closed jiangqiang1996 closed 1 year ago
是哪个类不兼容了?
是哪个类不兼容了?
Fastjson2项目里面使用到javax.servlet包下的代码多数都不兼容吧。但是目前只遇到图片中这个类不兼容,我使用的springboot3环境,这个异常类名字变了,导致找不到该class,因此我在项目里创建了一个和该类名字一样的异常class,貌似可以正常运行。
是哪个类不兼容了?
看编辑器提示,貌似httpservletrequest和httpservletservletresponse这两个类也是找不到的, 因为springboot是Tomcat10的环境,但是我运行的时候只会报错找不到javax.servlet.ServletOutputStream,所以我自己写了一个同名的类,暂时可以运行。
javax.servlet这个是标准,错误应该不是你说的原因,你补上这个依赖试试看
https://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/4.0.1/
javax.servlet这个是标准,错误应该不是你说的原因,你补上这个依赖试试看
https://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/4.0.1/
你发的这个里面最近更新是2018年了,之前java官方因为版权原因把包名改了。你可以看看这个https://repo1.maven.org/maven2/jakarta/servlet/jakarta.servlet-api/ 这个才是最新的标准,目前大多数第三方关于javaee的包都有这个不兼容问题,javax全部改成了jakarta
最新版本的spring-web 5.3.22依赖的也是javax.servlet
servlet.api这个标准并非sun制定的,也不是甲骨文制定的,而是Jakarta组织制定的,javax.servlet实现是sun公司写的,现在属于甲骨文,所以Jakarta组织不能再使用javax.servlet作为包名,因为是别人的东西。最新的标准修改了包名,导致很多依赖有问题。 你可以去看看Tomcat10,全部使用的Jakarta作为包名,最新的spring6也是Jakarta。
上面两个图片可以对比一下,Fastjson既然是下一个十年的产物,自然得兼容未来,可以适当抛弃过去。国产java工具包hutool专门针对servlet提供了两个工具类,就是因为这个原因。
目前阿里的druid数据源的web监控页面也是有这个问题
收到,感谢告知,我之前还没留意到这个问题。是要支持新标准的,我查了spring6的发布日期是10月,后续版本要补上,这块你也比较熟悉,能参与进来提交PR么?
收到,感谢告知,我之前还没留意到这个问题。是要支持新标准的,我查了spring6的发布日期是10月,后续版本要补上,这块你也比较熟悉,能参与进来提交PR么?
可以的
https://github.com/spring-projects/spring-petclinic 能否帮忙增加一个类似上面这样的DEMO子项目
https://github.com/spring-projects/spring-petclinic 能否帮忙增加一个类似上面这样的DEMO子项目
需要引入哪方面的依赖?
https://github.com/spring-projects/spring-petclinic 能否帮忙增加一个类似上面这样的DEMO子项目
可否告知需要测试什么,我才知道需要哪方面的demo
想测试FastjsonSockJsMessageCodec和FastJsonJsonView
想测试FastjsonSockJsMessageCodec和FastJsonJsonView
FastJsonJsonView在spring5上面运行是没什么问题,之前没使用过websocket,所以FastjsonSockJsMessageCodec我只是引入了能正常启动。spring6最低要求jdk版本为17,所以要想兼容未来,fastjson2项目只能舍弃很多兼容以前老版本的东西。没必要为了兼容老版本引入过多重复的包,导致性能问题。
能否先修改为spring 5.x的demo,等spring6正式版本之后,我创建一个jdk17的分支,在jdk17的分支上增加spring6的demo。
能否先修改为spring 5.x的demo,等spring6正式版本之后,我创建一个jdk17的分支,在jdk17的分支上增加spring6的demo。
已经推送spring5的demo,完善了websocket的demo
已经合并并且做了一些调整当做项目的一个module了,怎么启动怎么访问,能写一个readme么?
已经合并并且做了一些调整当做项目的一个module了,怎么启动怎么访问,能写一个readme么?
spring6test这个模块下的代码需要删除么?这个是基于jdk17的
可以先保留,等jdk17的分支做好了,就启用
你这个demo很棒,我根据这个demo优化了FastJsonHttpMessageConverter的实现,比如 https://github.com/alibaba/fastjson2/issues/755
能帮忙提供例子把 FastJsonJsonView 等其他的类也用起来么?
可以先保留,等jdk17的分支做好了,就启用
你这个demo很棒,我根据这个demo优化了FastJsonHttpMessageConverter的实现,比如 #755
能帮忙提供例子把 FastJsonJsonView 等其他的类也用起来么?
FastJsonJsonView类已经用上了,还有哪些其他类? 貌似没别的了吧?
FastjsonSockJsMessageCodec 没用到?
FastjsonSockJsMessageCodec 没用到?
WebSocketConfig这个类下用到了
webSocketHandlerRegistry.addHandler(new ChatMessageHandler(), "/websocket/*").withSockJS().setMessageCodec(new FastjsonSockJsMessageCodec());
我也不知道用的对不对,主要是不知道生效没有,之前没用过websocket,但是这么用websocket是正常的。
感谢两位辛勤做贡献
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.24</version>
</dependency>
已经支持
扩展包使用到了javax.servlet.ServletOutputStream类,最新版springboot使用的类jakarta.servlet.ServletOutputStream
包名变化导致不兼容问题。