问题发生
我们公司代码生成的时候,查询列表统一都是使用了setEntity() ,查询写法如下:

查询的方法是Get方法:
前端是通过url加参数传过来的,如果有一个参数值为空的时候,由于setEntity() 并不过滤空白,执行sql的时候 会把""作为参数去当做查询条件,查询就出现了问题:


于是我就想把空白转换为null来解决这个问题了。
初始解决
一开始自然而然想到在setEntity之前先判断, 如果BasReservoirArea这个实例有字段的值是空白就设置为null

用到的工具类如下


问题解决了。
优化
由于感觉上面的解决方案不够专业,不够优雅,所以先寻找更好的解决办法,在后端接收参数值的时候,如果接收的是空白,直接设置为null, 这样就不需要再次转换了。
解决问题首先要考虑两种情况,一种是前端通过Get请求,路径上带参数;另一种是Post请求,带着Request报文。
Post请求报文体
由于笔者熟悉Post中报文体的转换,知道是MappingJackson2HttpMessageConverter结合Jackson实现报文体转换为实例的,而且也研究过Jackson, 所以解决办法如下
创建一个针对于String.class的Jackson的反序列类:
@ControllerAdvice
public class GlobalControllerAdiviceController {
//WebDataBinder是用来绑定请求参数到指定的属性编辑器,可以继承WebBindingInitializer
//来实现一个全部controller共享的dataBiner Java代码
&n

本文探讨了在SpringBoot项目中遇到接口参数为空字符串时导致查询问题的解决方案。通过创建自定义反序列化类、使用StringTrimmerEditor和定制Jackson ObjectMapper,实现了Post和Get请求中空白值自动转换为null,提升了代码的优雅性和效率。
最低0.47元/天 解锁文章

1150

被折叠的 条评论
为什么被折叠?



