fastjson 反序列化的一个问题

bfrts1fy  于 2021-11-27  发布在  Java
关注(0)|答案(8)|浏览(442)

通过google翻阅资料得知,fastjson在反序列化时匹配的是字段名(name),只要字段名符合,就进行反序列化,如果类型不符合,则进行强制类型转换。那么如果我不想要这种类型转换的效果,做到在反序列化的时候如果类型不一致就抛一个Exception,可以做到么?如果可以,如何做? 有没有相关配置~

cygmwpex

cygmwpex1#

为什么有这个需求?

3b6akqbq

3b6akqbq2#

因为要做一个精准控制数据类型的接口,在反序列化转换的时候就要校验数据类型。比说说一个字段我要求传String过来,对方的JSON却传来一个Int的值。当然不希望这种事情发生~ @wenshao

qyzbxkaa

qyzbxkaa3#

其实这是json schema的工作,目前有计划支持完整的json schema

qlfbtfca

qlfbtfca4#

@kimmking 所以这个需求能做到么? 有时候解析做的太智能了反而让人头疼~

8e2ybdfx

8e2ybdfx5#

@Tomorooo

在有限的空间做类型转换,反而将事情搞复杂。 既然是数据协议了,为何这边是string接收,外部传入要用int发呢。

这种问题不单纯是技术问题,所以不要在技术领域中找答案啦

zhte4eai

zhte4eai6#

@passionke 部分赞同~
但是你也提到了,既然是一个数据协议,作为接口提供方,我当然要考虑到很多种case,满足协议要求是一种处理,不满足是另一种处理。
我提的issue是针对这种需求情况下框架能否支持,其实要的answer也很简单。
既然fastjson能够智能地将错误类型纠正过来,那么不做这种纠正就应该更简单了...
我只是想知道fastjson有没有地方可以配置这个"纠正"功能...仅此而已

u2nhd7ah

u2nhd7ah7#

这个功能是没有的。 既然用String接收了。 你也不在乎传进来的参数带了引号没有吧。 建议校验就使用beanvalidation jsr303 或者jsr349中的功能来校验是不是你要的字符串就行了。
从这点来看,有没有这个功能是无所谓的

j2qf4p5b

j2qf4p5b8#

可是一个field的解析异常导致整个解析过程中断,从而拿不到想要的结果,是不是也不合理?是不是可以提供个供用户选择是否要中断解析的选择。在这个模式下,能解析的都会拿到相应的信息,解析不出来的就都是默认值。由于我是个安卓开发,这个需求产生于这样的场景:在很快的开发速度驱动下,客户端和server端约定的字段协议会很快变更,在变更不同步的时候,客户端经常解析到已经变化类型的字段,从而导致解析异常中断解析过程,最后一整个页面都是白页。

相关问题