一、问题由来

最近在和前端调试一个自己写的接口时,频频出现问题,让我很是烦恼。因此写下这篇博文来记录开发中遇到的一些问题。第一个问题是

前端页面传递参数后,后台不能正常接收参数。我写好接口以后,通过swagger测试,发现没问题,然后就和前端进行调试,可是前端进

行调试时频频出错。Controller的代码如下,

使用Swagger工具调试接口时,也没有问题。因为文件是存放在测试环境上面的,所以报了一个文件不存在是正确的。

可问题是前端测试时报的确实另外一个错,文件ID不存在,这个错误也是自己主动抛出的异常。这就很尴尬了。

二、问题分析

经过反复的排查,发现有一个地方存在问题,那就是参数的传递方式不一样。前端开发人员传递参数时的方式是Request Payload,而我在使用Swagger测试时

传递参数的方式为Form Data。因为这一不同导致了BUG的出现,问题找到了,我想应该会比较好解决。

三、解决方案

发现这个问题,我立马和前端人员协商,看看是他修改还是我修改。去看了之前已经做好的一些功能,想看看使用Post请求传递参数的方式是什么。

结果发现也是Request Payload这种方式,Controller中也是使用PostMapping。接着我开始修改后台代码,修改后的代码如下,

使用Swagger测试情况如下,测试正常。部署到测试服务器时,数据也正确返回了。

我本以为现在应该没问题了,测试也正常了。可是前端测试人员给我反馈,还是不行没有数据返回,返回的错误信息是没有没有查询到文件。

我让他把传递的参数单独发给我,我直接去数据库中查询,发现有数据,这就奇了怪了。

为什么我在本地测试时,查询没问题,前端人员使用前端项目访问时就出问题呢?只得继续排查。让前端人员调试时直接连接我的后台,打断点进行调试。

这是发现问题:使用这种方式,public ResponseEntity<JsonResult<String>> previewExcel(@RequestBody String fileId){}接收到的参数不是我

想要的,接收到的fileId的值为: "fileid:'379ecdefeed5468c845f1984fc26f78c'",就相当于把传递进来的整个JSON数据映射到fileId上了,而并不是仅仅是后

面的值。确定这个问题后,我修改了代码将@RequestBody后面的单个变量修改为一个参数输入的类如下。

然后再次调试,结果如下。变化是参数的传递方式还是Request Payload,但是里面的参数变为JSON格式的数据了。然后将代码部署到测试环境,前端人员测试时正确,问题解决。

以前开发时,还真没有注意这些细节问题。Controller中使用不同的注解,传递参数的方式也会不一样。同时也对于@RequestBody注解有了更深刻的理解。

这个注解是将Post请求中的JSON数据映射到一个类中,不能单独映射到某个字段中,即使是单个字段最好也是使用请求输入类来接收收据。吃一堑,长一智,

通过这次采坑,又学习到不少东西。

使用@RequestBody注解踩的坑的更多相关文章

  1. 简单看看@RequestBody注解原理

    又到了很无聊的时候了,于是随便看看源码假装自己很努力的样子,哈哈哈: 记得上一篇博客随便说了一下RequestBody的用法以及注意的问题,这个注解作为非常常用的注解,也是时候了解一波其中的原理了. ...

  2. 从零开始学 Java - Spring 支持 CORS 请求踩的坑

    谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...

  3. @requestBody注解的使用

    1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是ap ...

  4. dubbox注解的一个坑

    我和我同事Daniel排查的一个问题,原文是我同事Daniel写的,我做了些修改了补充. 我们dubbox的provider端有很多service开发时没有考虑到幂等问题,于是只能暂时关掉dubbo的 ...

  5. webuploader插件,我踩得坑

    我在目前的公司做的项目要么是原生写法去做项目,要么就是vue+webpack做项目,但是vue这部分只是用了模板template,vue其他的都没用. 有一个项目需要做上传图片的功能,老大扔给我一个插 ...

  6. 谈谈调用腾讯云【OCR-通用印刷体识别】Api踩的坑

    一.写在前面 最近做项目需要用到识别图片中文字的功能,本来用的Tesseract这个写的,不过效果不是很理想. 随后上网搜了一下OCR接口,就准备使用腾讯云.百度的OCR接口试一下效果.不过这个腾讯云 ...

  7. springMVC中@RequestParam和@RequestBody注解的用法

    springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...

  8. 浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

    浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别 Spring 2.5 版本新增了注解功能, 通过注解,代码编写简化了很多:但熟悉注解的使 ...

  9. @RequestBody注解用法

    做Java已经有8个多月了,但是基本没有学习过Java语言,因此在项目中写代码基本靠的是其他语言的基础来写Java代码,写出来的很多代码虽然能用,但是感觉很不地道,虽然从来没有同事说过,但是我自己觉得 ...

  10. Asp.Net Core中使用Swagger,你不得不踩的坑

    很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagge ...

随机推荐

  1. 【一】分布式训练---单机多卡多机多卡(飞桨paddle1.8)

    1.分布式训练简介 分布式训练的核心目的: 加快模型的训练速度.通过对训练任务按照一定方法拆分分配到多个计算节点进行计算,再按照一定的方法对需要汇总的信息进行聚合,从而实现加快训练速度的目的. 1.1 ...

  2. 深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型

    深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型.LEO模型.Reptile模型 1.Model-Agnostic Meta-Learning Model-Agnostic Meta-L ...

  3. MySQL【四】---案例实战{拆分多表、外键创建等}

    1.准备数据 数据准备 create database jing_dong charset = utf8mb4; 创建一个商品goods数据表: create table goods( id int ...

  4. 2.6 CE修改器:代码注入功能

    从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一.在第6关的时候我们说到指针的找法,用基址定位动态地址.但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大.代码 ...

  5. 线程锁(Python)

    一.多个线程对同一个数据进行修改 from threading import Thread,Lock n = 0 def add(lock): for i in range(500000): glob ...

  6. PHP实现字符串反转

    方法一 用自带的函数strrev echo strrev('hello'); 方法二 自写循环方法 $str = 'hello'; $i = strlen($str); $newStr=''; whi ...

  7. Android 相册

  8. 《ASP.NET Core 与 RESTful API 开发实战》-- (第8章)-- 读书笔记(上)

    第 8 章 认证和安全 8.1 认证 认证(Authentication)是指验证用户身份的过程,授权(Authorization)是验证一个已经通过认证的用户是否有权限做某些事的过程 常见的 HTT ...

  9. ABC 304

    T4 在一个平面上有一块面积无限的蛋糕,给出 \(n\) 颗草莓的所在位置和 \(a\,(b)\) 条平行与 \(x\,(y)\) 轴的切刀位置. 切刀会把蛋糕沿 \(x\,(y)\) 轴切开.因此一 ...

  10. 好书推荐之《JAVA编程思想》

    名人推荐 真是一本透着编程思想的书. 上面的书让你从微观角度了解 Java,而这本书则可以让你从一个宏观角度了解 Java. 这本书和 Java 核心技术的厚度差不多,但这本书的信息密度比较大. 所以 ...