一、问题由来

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

前端页面传递参数后,后台不能正常接收参数。我写好接口以后,通过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. 补发一篇tensorflow下MADDPG环境搭建配置

    相关文章: [一]MADDPG-单智能体|多智能体总结(理论.算法) [二]MADDPG多智能体算法实现(parl)[追逐游戏复现] 之前用的都是paddle,现在补一下tf的. github上ope ...

  2. HanLP — 词性标注

    词性(Part-Of-Speech,POS)指的是单词的语法分类,也称为词类.同一个类别的词语具有相似的语法性质 所有词性的集合称为词性标注集. 词性的用处 当下游应用遇到OOV时,可以通过OOV的词 ...

  3. Visual Studio 2017高级编程(第7版)中文版

    发布一个Visual Studio 2017的编程书籍: 链接:https://pan.baidu.com/s/1-RL9wkNYXwvQOdWrnAsSZQ 提取码:ig0c

  4. ESET防病毒软件 v16.2.11.0 - 安全

    上次编写了笔者自己的防护软件的博文:我的电脑防护安全软件 ,今天把ESET防病毒软件的套装的下载地址发出来,让广大的朋友能够免费使用到这个软件. 链接:https://pan.baidu.com/s/ ...

  5. Github开源项目Excalidraw:简洁易用的手绘风格白板工具

    Excalidraw是Github上的一个开源项目,它提供了一个简洁易用的手绘图形创建工具,用户可以通过它创建流程图.示意图.架构图和其他各种图形.本文将介绍Excalidraw的特点和功能,并探讨其 ...

  6. Python实现二叉查找

    搜索 搜索是在一个项目集合中找到一个特定项目的算法过程.搜索通常的答案是真的或假的,因为该项目是否存在. 搜索的几种常见方法:顺序查找.二分法查找.二叉树查找.哈希查找 二分法查找 二分查找又称折半查 ...

  7. JS 这一次彻底理解插入排序

    壹 ❀ 引 在前两篇排序文章中,我们分别介绍了冒泡排序与选择排序,趁热打铁,我们接着聊插入排序.老实说,在分析排序过程中头脑很清楚,过后再尝试写出排序代码还有点坎坷...可能是我脑瓜子不太机灵的问题, ...

  8. Spring Cloud Gateway微服务网关快速入门

    介绍 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring C ...

  9. Servlet实现导出下载csv文件

    工作上遇到的场景,需要将客户列表数据导出成csv文件.测试了一个最简单版本,记录一下. 订单实体类: package entity; /** * 订单信息实体 * Created by dylan-p ...

  10. Java集合框架学习(五) ArrayList详解

    Arraylist介绍 Arraylist类实现了List接口. public class ArrayList<E> extends AbstractList<E> imple ...