首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当Put和Post请求的请求主体为空时,MockMvc失败

当使用MockMvc进行接口测试时,如果使用PUT或POST请求,并且请求主体为空,可能会导致MockMvc失败。这是因为在这种情况下,MockMvc无法正确解析请求的内容。

解决这个问题的方法是在发送PUT或POST请求时,确保请求主体不为空。可以通过在请求中添加一些数据来解决这个问题,例如一个空的JSON对象{}或一个空的字符串""。

另外,还可以使用MockMvc的content方法来设置请求的内容类型,以确保请求主体被正确解析。例如,可以使用contentType(MediaType.APPLICATION_JSON)来设置请求的内容类型为JSON。

以下是一个示例代码,展示了如何在MockMvc中处理PUT和POST请求的空请求主体:

代码语言:txt
复制
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
import import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

class MyControllerTest {

    private MockMvc mockMvc;

    @BeforeEach
    void setUp() {
        mockMvc = MockMvcBuilders.standaloneSetup(new MyController()).build();
    }

    @Test
    void testPutRequestWithEmptyBody() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.put("/api/myendpoint")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{}"))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }

    @Test
    void testPostRequestWithEmptyBody() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/api/myendpoint")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{}"))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }
}

在上面的示例中,我们使用MockMvc执行了PUT和POST请求,并在请求主体中添加了一个空的JSON对象{}。这样可以确保请求主体不为空,从而避免了MockMvc失败的问题。

需要注意的是,这只是解决了请求主体为空时的MockMvc失败问题,并不代表这是最佳实践。在实际开发中,应根据具体情况来确定是否允许请求主体为空,并在接口设计中进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python中property装饰器,迭代器,生成器,http请求postput区别,URLURI, RESTfulAPI

for循环来迭代它, generator保存是算法,每次调用next(),就计算出下一个元素值,直到计算到最后一个元素,没有更多元素,抛出StopIteration错误 https://pyzh.readthedocs.io...postput区别: 如果一个方法(API)重复执行多次,产生效果是一样,那它就是idempotent 假如我们发送两个http://superblogging/blogs/post/Sample...请求,服务器端是什么样行为?...如果产生了两个博客帖子,那就说明这个服务不是idempotent,因为多次使用产生了不同效果;如果后一个请求把第一个请求覆盖掉了,那这个服务就是idempotent。...前一种情况,应该使用POST方法,后一种情况,应该使用PUT方法, post是发送请求put也是发送请求,但是put后一个请求会把前一个请求覆盖掉。

1.1K40

如何对Spring MVC中Controller进行单元测试

对Controller进行单元测试是Spring框架原生就支持能力,它可以模拟HTTP客户端发起对服务地址请求,可以不用借助于诸如Postman这样外部工具就能完成对接口测试。...具体来讲,是由Spring框架中spring-test模块提供实现,详见MockMvc。...初始化MockMvc有2种方式: 方式1:明确指定需要测试“Controller”类进行配置 方式2:基于Spring容器进行配置,包含了Spring MVC环境所有“Controller”类...支持对常见HTTP方法,如:GET,POSTPUT,DELETE等,甚至还支持文件上传请求。...有2种方式: 1.使用JUnit提供Assert断言工具判断返回结果,这是一种非常普遍常见方式 2.在MockMvc框架中可以通过andExpect()方法定义一个或多个预期结果,其中一个期望结果断言失败

2.1K30

Spring Security技术栈开发企业级认证与授权(二)使用Spring MVC开发RESTful API

(POST) 这里主要介绍三个知识点: @RequestBody映射请求体到Java方法参数 @Valid注解BindingResult验证请求参数合法性并处理校验结果 @RequestBody...2)第二个知识点案例,@Valid注解BindingResult验证请求参数合法性并处理校验结果 使用Java类来接受参数是,往往需要对参数进行校验,而校验一般都是使用Hibernate提供校验器来进行校验...这里我向后台传递一个JSON字符串,人为使得usernamepassword两个字段null。这里仅仅简单介绍表单验证注解,下一篇博客将重点介绍。...> birthday= ] 3、用户修改删除请求(PUT、DELETE) 由于RESTful风格API是基于方法来进行区分,所以设计到数据修改删除使用方法是PUTDELETE...,接下来使用案例方式介绍修改删除API开发。

1.1K41

如何在 SpringSpring Boot 中优雅地做参数校验?

PersonController 我们在需要验证参数上加上了@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。...)); } } 使用 Postman 验证 [20210421175345253.png] 验证请求参数 验证请求参数(Path Variables Request Parameters)即是验证被...@Data public class Person { // 验证组 DeletePersonGroup 时候 group 字段不能为 @NotNull(groups = DeletePersonGroup.class...) // 验证组 AddPersonGroup 时候 group 字段需要为 @Null(groups = AddPersonGroup.class) private String...JSR 提供校验注解: @Null 被注释元素必须 null @NotNull 被注释元素必须不为 null @AssertTrue 被注释元素必须 true @AssertFalse 被注释元素必须

1.8K10

Spring MVC服务端单元测试工具MockMvc

;缺点是需要在开发过程中多花一点点间去写测试用例(个人觉得这个时间消耗是会在后续便捷操作中还给你)。...* 如果传递用户ID不是数据 {id:\\d+}正则表达式匹配失败情况 * * @throws Exception */ @Test public void...( // MockMvcRequestBuilders // 请求对象 .put("/user/1") // 请求内容个数...MockMvcRequestBuilders 请求构建者对象 get、postput、delete分别表示发送对应Method请求,参数对应接口地址;如 MockMvcRequestBuilders.get...表示请求数据Json格式数据 content 请求后端传递数据;数据格式需要和contentType指定对应 andExpect 添加期望结果 MockMvcResultMatchers.status

88630

使用RESTful风格开发Java Web

实例说明: 在平时 Web 开发中,method 常用值是 GET POST,但是实际上,HTTP 方法还有 PATCH、DELETE、PUT 等其他值,这些方法又通常会匹配如下 CRUD...动作: CRUD 动作 HTTP 方法 Create POST Read GET Update PUT 或 PATCH Delete DELETE 尽管通常来讲,HTTP 方法会映射 CRUD 动作...,但这并不是严格限制,有时候 PUT 也可以用来创建新资源,POST 也可以用来更新资源。...MockMvc简单用法,它能够直接使用网络形式,转换到Controller调用,这样使得测试速度快、不依赖网络环境,而且提供了一套验证工具,这样可以使得请求验证统一而且很方便。...API页面,我们可以点开具体API请求POST类型/users请求例,可找到上述代码中我们配置Notes信息以及参数user描述信息,如下图所示: [1240] API文档访问与调试 在上图请求页面中

1.3K50

使用RESTful风格开发Java Web

实例说明: 在平时 Web 开发中,method 常用值是 GET POST,但是实际上,HTTP 方法还有 PATCH、DELETE、PUT 等其他值,这些方法又通常会匹配如下 CRUD...动作: CRUD 动作 HTTP 方法 Create POST Read GET Update PUT 或 PATCH Delete DELETE 尽管通常来讲,HTTP 方法会映射 CRUD 动作...,但这并不是严格限制,有时候 PUT 也可以用来创建新资源,POST 也可以用来更新资源。...实现了对HTTP请求模拟,从示例代码就能够看出MockMvc简单用法,它能够直接使用网络形式,转换到Controller调用,这样使得测试速度快、不依赖网络环境,而且提供了一套验证工具,这样可以使得请求验证统一而且很方便...API页面,我们可以点开具体API请求POST类型/users请求例,可找到上述代码中我们配置Notes信息以及参数user描述信息,如下图所示: API文档访问与调试 在上图请求页面中

80730

SpringBoot单元测试

MockMvc概念 MockMvc是由spring-test包提供,实现了对Http请求模拟,能够直接使用网络形式,转换到Controller调用,使得测试速度快、不依赖网络环境。...主要有两个实现:StandaloneMockMvcBuilderDefaultMockMvcBuilder。 MockMVC基本步骤 (1) mockMvc.perform执行一个请求。...MockMvcRequestBuilders.get(“/XXX/get”):构造一个请求Post请求使用.post方法 3. contentType(MediaType.APPLICATION_JSON_VALUE...可以在任何时候启用禁用断言验证,因此可以在测试启用断言而在部署禁用断言。 使用断言是判断一个函数或对象一个方法所产生结果是否符合你期望那个结果。...Postman能够发送任何类型HTTP请求(GET, HEAD, POST,PUT..),附带任何数量参数HTTP headers。

90820

【原创】关于Spring中参数校验一点思考

数据校验重要性就不用说了,即使在前端对数据进行校验情况下,我们还是要对传入后端数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。...JSR提供校验注解: •@Null 被注释元素必须 null•@NotNull 被注释元素必须不为 null•@AssertTrue 被注释元素必须 true •@AssertFalse 被注释元素必须...@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。...模拟请求 Controller 方式来验证是否生效,当然你也可以通过 Postman 这种工具来验证。...验证请求参数(Path Variables Request Parameters) Controller: 一定一定不要忘记在类上加上 Validated 注解了,这个参数可以告诉 Spring 去校验方法参数

94710

【保姆级教程】SpringBoot单元测试,文末介绍Postman基本使用

MockMvc概念 MockMvc是由spring-test包提供,实现了对Http请求模拟,能够直接使用网络形式,转换到Controller调用,使得测试速度快、不依赖网络环境。...MockMVC基本步骤 (1) mockMvc.perform执行一个请求。 (2) MockMvcRequestBuilders.get(“XXX”)构造一个请求。...现在将上面的一些琐碎知识点汇总一下: mockMvc.perform:执行一个请求 MockMvcRequestBuilders.get(“/XXX/get”):构造一个请求Post请求使用.post...可以在任何时候启用禁用断言验证,因此可以在测试启用断言而在部署禁用断言。 使用断言是判断一个函数或对象一个方法所产生结果是否符合你期望那个结果。...Postman能够发送任何类型HTTP请求(GET, HEAD, POST,PUT..),附带任何数量参数HTTP headers。

1.7K10

SpringBoot2 集成测试组件,七种测试手段对比

,自测根本目的是自己提前解决可能出现问题;如果缺少自测提测两个关键步骤,那么问题就会被传递给更多用户,产生更多资源消耗; 自测是于开发而言,提测是对专业测试人员而言,如果尽可能在自测阶段就发现问题...但是该工具不适应于复杂流程化测试,例如需要根据上次接口响应报文做分别处理,或者下次请求需要填充某个接口响应数据。...三、Swagger文档 Swagger管理接口文档,是当下服务中很常用组件,通过对接口对象简单注释,快速生成接口描述信息,并且可以对接口发送请求,协助调试,该文档在前后端联调中极大提高效率。...五、Http请求模式 通过模拟接口Http请求实现方式,目前来说个人感觉灵活最高方式,先看简单案例: @RunWith(SpringRunner.class) @SpringBootTest(...,每个节点模拟都具有一定难度,通常在完整流程中涉及到服务库表都是多个,并且请求链路复杂,基于一个灵活自动化流程,去测试完整链路,可以对效率有极大提升。

38320

【保姆级教程】Spring Boot 单元测试

MockMvc概念 MockMvc是由spring-test包提供,实现了对Http请求模拟,能够直接使用网络形式,转换到Controller调用,使得测试速度快、不依赖网络环境。...MockMVC基本步骤 (1) mockMvc.perform执行一个请求。(2) MockMvcRequestBuilders.get(“XXX”)构造一个请求。...MockMvcRequestBuilders.get(“/XXX/get”):构造一个请求Post请求使用.post方法 3. contentType(MediaType.APPLICATION_JSON_VALUE...可以在任何时候启用禁用断言验证,因此可以在测试启用断言而在部署禁用断言。 使用断言是判断一个函数或对象一个方法所产生结果是否符合你期望那个结果。...Postman能够发送任何类型HTTP请求(GET, HEAD, POST,PUT..),附带任何数量参数HTTP headers。

27.4K86

保姆级教程:Spring Boot 单元测试

MockMvc概念 MockMvc是由spring-test包提供,实现了对Http请求模拟,能够直接使用网络形式,转换到Controller调用,使得测试速度快、不依赖网络环境。...Java实现pdfExcel生成及数据动态插入、导出 MockMVC基本步骤 (1) mockMvc.perform执行一个请求。...MockMvcRequestBuilders.get(“/XXX/get”):构造一个请求Post请求使用.post方法 3. contentType(MediaType.APPLICATION_JSON_VALUE...可以在任何时候启用禁用断言验证,因此可以在测试启用断言而在部署禁用断言。 使用断言是判断一个函数或对象一个方法所产生结果是否符合你期望那个结果。...Postman能够发送任何类型HTTP请求(GET, HEAD, POST,PUT..),附带任何数量参数HTTP headers。

2.5K20

你需要了解都在这里!

我个人觉得这个统一异常处理一样是后端很容易做好一件事情,同时也是很有必要事情。如果对后端如何统一异常处理不太清楚朋友,也可以留言一下,我后面会分享自己在项目中学到统一异常处理方法。...JSR提供校验注解: @Null 被注释元素必须 null @NotNull 被注释元素必须不为 null @AssertTrue 被注释元素必须 true @AssertFalse...@NotEmpty 被注释字符串必须非 @Range(min=,max=,message=) 被注释元素必须在合适范围内 验证Controller输入 验证请求体(RequestBody...) Controller: 我们在需要验证参数上加上了@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。...Postman 验证结果 验证请求参数(Path Variables Request Parameters) Controller: 一定一定不要忘记在类上加上 Validated 注解了,这个参数可以告诉

1.2K50

API集成测试:SpringBoot+Junit

开发乙模式看起来比较理想,但现实情况中开发乙并不会在postman中管理及维护这些测试用例,慢慢这些所谓测试用例就与其实现代码脱钩了,于是某个功能发生变化需要对相关API进行回归测试,便只能依托于测试小哥哥...api/order编写一个测试用例,可以看到该测试用例规定了/api/order在特定情况下行为,是"开发乙模式"一种量化,/api/order行为被破坏,该测试用例可以在回归测试阶段提前暴露风险...() throws Exception { // 以POST方式请求/api/order,并且不携带任何请求参数 mockMvc.perform(MockMvcRequestBuilders.post...这类测试用例越来越多时,重构会变成了一件几乎不可能事情,因为重构意味着推翻原有的技术实现,推翻原有的技术实现也就意味着大规模测试用例都将执行失败。...总结 单元测试关注函数/类行为,API集成测试关注API行为 一次性代码不会被使用到API不适合为其编写测试用例 使用API集成测试可以在避免手动测试同时收获一套自动化测试用例(这些测试用例在进行回归测试

55230
领券