配置Json序列化处理前端传给服务端的Json对象中属性默认为""值的问题

场景:
在查询产品数据时,拼接高级搜索条件,需要跟一个字段的值去显示已匹配或者未匹配以及疑似
现象:
直接用QueryDSL提供的isNull()或者isNotNull()查询出来的数据不完成,还有需要该字段值为"“的产品数据过滤掉了,于是额外手动添加了where条件(eq(”")或 ne(""))
目前的解决方案:
1.数据入库前用isBlank()/isNotBlank()筛选出"“然后设置为null
2.Json序列化配置,统一处理”“设置null,然后null入库
问题:
可不可以用Json序列化配置统一处理的这种方式?
还是说有场景需要”"这种数据入库?

框架层面的统一配置处理这种方式,我一架构部同事说,这样处理一刀切了,不好,不能这么配置(心理:没啥说服力),萌新在线提问,多多指教

Json序列化框架肯定是可以自动配置的。但是存在你说的问题 “一刀切”。你可以跟前端沟通以下,叫客户端POST数据的时候,把字符串为""的数据,从JSON里面删除。

后端处理,不能一刀切的话,就只有自己判断了。我觉得QueryDSL非常适合这种通过代码来判断数据后,添加条件。

// 伪代码
RequestBody body = ... // 请求体封装

JPAQuery  query ... // queryDsl

// 根据参数,添加条件
if isNotEmpty(body.name) {
  query.where(name.eq(body.name))
}
if isNotEmpty(body.email) {
  query.where(email.linke("%"+ body.email + "%"))
}

query.fetch(); // 获取检索结果

有的字段是需要的,现在的框架设计跟数据表耦合特别高,然后服务端代码大量使用了BeanCopy,目前就是入库前手动判断了,还有在实体类中的成员属性上加个注解(看下有没有或者自定义注解),如果为“”的时候给null,这样的话 也算是 按需处理了,避免了一刀切

2 Likes