linpeilie / mapstruct-plus

MapStruct Plus is an enhancement to the MapStruct framework. It can automatically generate the transformation operation between two classes through an annotation, omitting the operation of defining the interface of MapStruct, makes Java type conversion easy and elegant.
https://mapstruct.plus/
Apache License 2.0
279 stars 22 forks source link

Map不支持JSON字段格式 #85

Closed magleton closed 5 months ago

magleton commented 5 months ago

从数据库查询出来的数据始以Map的格式返回的,需要在业务代码中将其转换成业务需要的DTO格式,但是数据字段中有JSON格式,但是现在不支持JSON格式的转换,例如: image

linpeilie commented 5 months ago

没懂什么意思,贴下完整的代码

magleton commented 5 months ago

image 报错信息为: java: Can't map property "Object ext" to "Dict ext". Consider to declare/implement a mapping method: "Dict map(Object value)". Occured at 'T convert(Map arg0)' in 'BaseMapMapper'. 整个文档没有看到哪里可以自定义

linpeilie commented 5 months ago

数据库存储的格式?和这个类进行转换的对象,结构是什么样子的?

magleton commented 5 months ago

mysql现在不是支持json格式吗?dao直接查询出来是map格式的,不想再动dao已经写好了逻辑,所以就想将json先转换为一个Map,然后在在业务需要的地方自己去转换,数据格式 : {"userId":1 , "userName":"magleton","password":"aaaa","ext":{"nickName":"塵渊"}},但是ext中的数据每个模块不一样,所以也不可能一个一个去加,所以就想将ext统一转成Map,如果库支持自定义MapObjectConvert类的话,这个问题就解决了. image

linpeilie commented 5 months ago

没有支持json格式呀,支持的是map转为对象

magleton commented 5 months ago

想表达的意思是 MapObjectConvert 这个类可不可以支持自定义 库不支持json可以理解 因为有自己的考量 但是可以暴露出一些自定义的接口 看了一下源码 好像现在能够自定义的接口几乎没有

linpeilie commented 5 months ago

最初设计 Map 转为对象,覆盖了较常见的场景,所以没有留自定义的功能。dao 层查询出来是否可以直接转为 Map 来解决这个问题呢,不知道用的啥 orm 框架,MybatisPlus 支持查询出来直接转换为类型的

magleton commented 5 months ago

使用的MybatisPlus,但是基于它封装了一层,是为了统一业务开发的规范,所以从数据库查询出来的统一是map对象,让在上一层转换为dto对象。该库后期会预留出自定义功能吗?个人觉得这些自定义的能力还是很有用的,因为实际的场景太多了,除非该库只是自己公司或者自己的项目使用.

linpeilie commented 5 months ago

你现在的问题,与 Map 转换的功能,没啥关系。 是需要 String 转为目标对象的。是可以有多种方式实现的