Mockito测试Spring boot接口出现400错误
时间:2021-07-12
本文章向大家介绍Mockito测试Spring boot接口出现400错误,主要包括Mockito测试Spring boot接口出现400错误使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Mockito测试Spring boot接口出现400错误
前言:在学习使用Mockito测试接口的时候,返回结果的状态码总是失败,返回状态码为400,但是使用相同的数据利用postman却可以成功返回,找了很久最后发现似乎是因为在Mockito测试的时候j
ackson
配置没有起到作用(原因暂时不知道,如果有朋友知道麻烦在评论区告知,感激不尽!),下面是问题的具体描述和解决方案。
问题展示
- 接口代码如图所示:
- 利用postman的测试数据及结果(状态码为200,访问成功):
- 使用
MockMvc
接口测试代码及测试结果(状态码为400,失败):
@Test
public void hellTest() throws Exception{
String article = "{\n" +
" \"id\":21,\n" +
" \"author\":\"shweng\",\n" +
" \"title\":\"spring boot learning\",\n" +
" \"content\":\"test learning\",\n" +
" \"time\":\"2021-7-7 23:28:00\"\n" +
"}";
MvcResult result = mockMvc.perform(
MockMvcRequestBuilders
.request(HttpMethod.GET,"/Hello/hello")
.contentType("application/json")
.content(article)
).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.data.id").value(21))
.andDo(print())
.andReturn();
}
问题分析
400(Bad Request) 表示客户端请求有语法错误,不能被服务器正确的解析。分析可能原因:
- 输入字符串格式有问题:用postman成功的数据复制进来,还是400状态码,排除。
- 数据没有设置成正确的JSON格式:尝试
contentType("application/json")
,contentType(MediaType.APPLICATION_JSON)
两种,都不可以,感觉也不是这个问题。 - Controller层json序列化失败:主要考虑到传入数据包含Date数据类型,可能时间格式化不对。原来是在
application.yml
配置文件中利用jackson
进行全局配置,因此postman可以测试正常,配置方法如图所示。解决方案:后利用JsonFormat对封装类的时间属性进行局部配置,成功解决问题,代码如图所示(注意:Atricle是接口接收数据的类,对传入的数据进行封装)。
总结
在spring boo中,@RestController
层注解的json
默认序列化中,日期格式默认为:2018-06-17T07:24:07.430+0000。因此在传输特定格式的date类型数据之前,需要进行配置。配置方式有两种:(1)修改yml
配置文件,利用jackson
进行全局配置(2)在封装类的属性上通过@JsonFormat
注解进行配置。
在本次出现postman测试端口可以过,但是MockMvc
接口单元测试过不了(400状态码)的原因可能是全局配置没有起作用(具体为什么不太清楚),通过@JsonFormat
对属性进行局部配置可以解决。
如有不当之处,欢迎指出,谢谢!
原文地址:https://www.cnblogs.com/wshbolgs/p/15003830.html
- 自制基于 Snips 和 Snowboy 的智能音箱来保护你的隐私
- 从 React 将从 BSD 改 MIT 许可证,谈如何选择正确的开源许可
- Topshelf 支持Mono 扩展Topshelf.Linux
- 如何在 React Native 实现类微信小程序平台:WebView 调用原生组件
- 如何运营一个开源项目并取得较大影响力?
- ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug
- Serverless 应用开发指南:基于 Serverless 与 Lambda 的微信公共平台
- Serverless 应用开发指南:serverless 的 hello, world
- 通过一组RESTful API暴露CQRS系统功能
- 通过使用结构化数据 JSON-LD,我为网站带来了更多的流量
- 使用 OWIN Self-Host ASP.NET Web API 2
- c#开源消息队列中间件EQueue 教程
- Serverless 框架 OpenWhisk 开发指南:使用 Node.js 编写 hello, world
- GOTO Berlin: Web API设计原则
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- C++核心准则E.19:如果无法选择适当的资源句柄,使用final_action表现清除处理
- VBA解析复合文档04——解析目录信息
- 【程序源代码】基于NetCore2.2/3.1功能强大的Cms建站系统
- Linux如何屏蔽国外IP-宝塔如何屏蔽国外IP-appnode如何屏蔽国外IP
- Spring Boot Actuator H2 RCE复现-解决篇
- Spring Boot Actuator H2 RCE复现
- 【JAVA基础&高级】 数组篇
- 回文对
- 初探线程池
- 【译】代码中如何写出更有意义的命名
- nodejs源码分析之线程
- Java String Krains 2020-08-05
- 垃圾回收相关概念 Krains 2020-08-06
- 算法—判断字符串是否为IP地址
- 基于SpringBoot的Web前后端分离开发