联调踩的坑:空和空字符串引发的巨大差异

2024-08-29 11:38

本文主要是介绍联调踩的坑:空和空字符串引发的巨大差异,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

今天和前端同学联调一个搜索接口,该接口会在图片上传后用于加载图片列表。诡异的是,这位同学在和我联调的过程中,每次上传图片后,却始终无法看到最新上传的图片。然而该接口在另外一个场景下是正常的,这也是我提供这个接口给他的原因。

排查过程

传了图片没被搜到?是不是上传后生成的图片 ID 没有落 DB?

看了一眼日志,果然没有 DB 相关的日志。那么是不是哪儿有做了控制,对应看了下代码,果然有个入参,跳过了图片 ID 的落库。

前端同学之前抄其他人的代码,就传了 true,所以导致图片 ID 压根没落 DB。听我一说,他立马试了下。我看日志确实走到了 DB,看来是向前了一步了呢。

不过前端同学仍然反馈说,还是查不到最新的图片。我用他产生的图片 ID,去搜相关日志,的确是没有搜索的返回。

看了半天日志,也瞥了几眼代码,还是毫无头绪。为什么明明另外一个场景可用,这个前端同学就拿不到正确结果呢?

还是做点尝试看能不能有点效果吧,我想到了两个场景做下比对。既然是同一个接口,我就在当前场景上传下图片,然后看下之前可用的那个场景是否拿到了最新图片的信息。结果是肯定的。那就说明,这两种场景的查询肯定是有区别的。

和前端同学对了下两种场景的入参,发现有个搜索关键词的字段 keyword。以前的场景时传了空字符串,而他这个场景压根没传。

我当时也没反应过来是这个问题,就和他说,要不试试参数搞一样?

前端同学试了下,果然通了。搞了一晚上,联调终于通了,内心很是酸爽,虽然已经晚上十一点了。

问题定位

知道是 keyword 这个字段捣的鬼,也促使我敏感地意识到问题所在。

我想起 SQL 查询塞值的时候,keyword 作为入参被特殊处理了,如下:

param.put("keyword", "%"+keyword+"%")

对应的 SQL 如下:

... where name like #{keyword}

恍然大悟,前端同学没传 keyword 时,系统默认取到了 null,然后到 SQL 塞值的时候,自然就拼接成了 where name like '%null%',也就是搜索接口会去匹配图片名含 null 这个字符串的数据。

我抽取了前端同学用这个接口能查到的数据,无一例外图片名字里都有 null 这个字符串。

而传空字符串,就不会改变语义,能匹配到所有数据。

启发

  1. 相信问题总能解决,在解决问题的刹那,你会有一种释然和成就感。
  2. 问题拆解,大问题拆解小问题,找到问题点,发现突破点,由少到多,慢慢消灭最终问题。
  3. 多方面多角度分析问题,多猜想多佐证消除问题。
  4. 做一些有意义的尝试,通过反馈,进一步确认自己的判断。
  5. 善于合作,互相引导,互相启发,共同解决问题,达到 1 + 1 > 2 的效果。

关注我的微信公众号,回复“礼包”领取我的学习资料

涵盖自学编程、Java技术、分布式笔记、算法刷题和程序员必读电子书等众多资料合集。

img

这篇关于联调踩的坑:空和空字符串引发的巨大差异的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117761

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St