首页
学习
活动
专区
工具
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失败问题,并不代表这是最佳实践。在实际开发中,应根据具体情况来确定是否允许请求主体为空,并在接口设计中进行相应的处理。

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

相关·内容

node后端接收到axios的post请求体为空

node后端接收到axios的post请求体为空???...使用axios发送post请求,传入了Object格式的参数,在node后端req.body接收到的参数为空,但是网页上抓包检查时,发现请求的body确实是携带了参数的?...// 配置解析 数据格式为表单数据的请求体 的中间件 app.use(express.urlencoded({ extended: false })) expres服务器默认无法解析数据格式为表单数据的请求体...key和value的标志,就把所有都当做key来处理 body-parser无法解析请求体中的JSON字符串,所以当收到JSON格式的参数时,因无法解析,所以req.body就为空了 解决: 1:...在开发中,发送请求的入参大多是一个对象。在发送时,如果该请求为get请求,就需要对参数进行转化。

9610
  • python中property装饰器,迭代器,生成器,http请求中的post和put的区别,URL和URI, RESTfulAPI

    for循环来迭代它, generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误 https://pyzh.readthedocs.io...post和put的区别: 如果一个方法(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,POST,PUT,DELETE等,甚至还支持文件上传请求。...有2种方式: 1.使用JUnit提供的Assert断言工具判断返回结果,这是一种非常普遍和常见的方式 2.在MockMvc框架中可以通过andExpect()方法定义一个或多个预期结果,当其中一个期望结果断言失败时

    2.3K30

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

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

    2K10

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

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

    95130

    使用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文档访问与调试 在上图请求的页面中

    84430

    MockMvc使用案例模拟前端http请求

    创建MockMvc对象时,可以指定要测试的控制器实例,也可以使用StandaloneMockMvcBuilder类的各种方法配置MockMvc对象。...MockMvc支持各种HTTP请求方式,例如GET、POST、PUT、DELETE等,可以使用MockMvcRequestBuilders类的静态方法创建请求对象。...创建请求对象时,可以指定请求的URL、请求参数、请求头部等信息。创建完成后,可以使用MockMvc对象的perform方法发送请求,并获取响应结果。...在测试过程中,可以使用MockMvc提供的各种方法对请求和响应进行模拟和验证,从而保证系统的正确性和稳定性。...在使用MockMvc时,需要熟悉其各种方法和API,以便能够充分利用其功能和特性,提高测试效率和测试质量。

    9810

    SpringBoot单元测试

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

    96220

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

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

    97510

    【保姆级教程】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。

    2.1K10

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

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

    41820

    【保姆级教程】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。

    31.3K97

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

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

    3.1K20
    领券