SpringBoot项目:接口参数空白值如何替换为null值

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

问题发生

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

SpringBoot项目:接口参数空白值如何替换为null值

查询的方法是Get方法:

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

SpringBoot项目:接口参数空白值如何替换为null值

SpringBoot项目:接口参数空白值如何替换为null值

于是我就想把空白转换为null来解决这个问题了。

初始解决

一开始自然而然想到在setEntity之前先判断, 如果BasReservoirArea这个实例有字段的值是空白就设置为null

SpringBoot项目:接口参数空白值如何替换为null值

用到的工具类如下

SpringBoot项目:接口参数空白值如何替换为null值

SpringBoot项目:接口参数空白值如何替换为null值

问题解决了。

优化

由于感觉上面的解决方案不够专业,不够优雅,所以先寻找更好的解决办法,在后端接收参数值的时候,如果接收的是空白,直接设置为null, 这样就不需要再次转换了。

解决问题首先要考虑两种情况,一种是前端通过Get请求,路径上带参数;另一种是Post请求,带着Request报文。

Post请求报文体

由于笔者熟悉Post中报文体的转换,知道是MappingJackson2HttpMessageConverter结合Jackson实现报文体转换为实例的,而且也研究过Jackson, 所以解决办法如下

创建一个针对于String.class的Jackson的反序列类:

@ControllerAdvice
public class GlobalControllerAdiviceController {
    //WebDataBinder是用来绑定请求参数到指定的属性编辑器,可以继承WebBindingInitializer
    //来实现一个全部controller共享的dataBiner Java代码
 &n
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值