此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

执行请求

本节介绍如何单独使用 MockMvc 来执行请求和验证响应。 如果通过WebTestClient请参阅相应的 编写测试 部分。spring-doc.cadn.net.cn

要执行使用任何 HTTP 方法的请求,如下例所示:spring-doc.cadn.net.cn

// static import of MockMvcRequestBuilders.*

mockMvc.perform(post("/hotels/{id}", 42).accept(MediaType.APPLICATION_JSON));

您还可以执行内部使用MockMultipartHttpServletRequest这样就不会实际解析 multipart 请求。相反,您必须将其设置为类似于以下示例:spring-doc.cadn.net.cn

mockMvc.perform(multipart("/doc").file("a1", "ABC".getBytes("UTF-8")));

您可以在 URI 模板样式中指定查询参数,如下例所示:spring-doc.cadn.net.cn

mockMvc.perform(get("/hotels?thing={thing}", "somewhere"));

您还可以添加表示 query 或 form 的 Servlet 请求参数 参数,如下例所示:spring-doc.cadn.net.cn

mockMvc.perform(get("/hotels").param("thing", "somewhere"));

如果应用程序代码依赖 Servlet 请求参数,并且不检查查询 string (通常是这种情况),使用哪个选项并不重要。 但请记住,随 URI 模板提供的查询参数将被解码 虽然请求参数通过param(…​)方法应该已经 被解码。spring-doc.cadn.net.cn

在大多数情况下,最好将上下文路径和 Servlet 路径保留在 请求 URI 的 URI 请求 URI如果您必须使用完整的请求 URI 进行测试,请务必将contextPathservletPath因此,请求映射可以正常工作,如下例所示 显示:spring-doc.cadn.net.cn

mockMvc.perform(get("/app/main/hotels/{id}").contextPath("/app").servletPath("/main"))

在前面的示例中,将contextPathservletPath与每个执行的请求一起。相反,您可以设置默认请求 属性,如下例所示:spring-doc.cadn.net.cn

class MyWebTests {

	MockMvc mockMvc;

	@BeforeEach
	void setup() {
		mockMvc = standaloneSetup(new AccountController())
			.defaultRequest(get("/")
			.contextPath("/app").servletPath("/main")
			.accept(MediaType.APPLICATION_JSON)).build();
	}
}

上述属性会影响通过MockMvc实例。 如果在给定请求中也指定了相同的属性,它将覆盖默认值 价值。这就是为什么默认请求中的 HTTP 方法和 URI 无关紧要的原因,因为 必须在每个请求中指定它们。spring-doc.cadn.net.cn


APP信息