SpringBoot:实现动态mock接口(server)

本文介绍了一种通过通配符获取请求URL路径,并动态配置响应信息的方法。具体实现了Controller与Service层的功能,展示了如何设置HttpServletResponse返回自定义的数据。

其实思路很简单,通过通配符获取请求url的路径,然后配置自己所需要的响应信息,再通过配置HttpServletResponse返回给前端相应的数据。

  • Controller
@RequestMapping("/mock/**")
public void mockTest(HttpServletRequest request, HttpServletResponse response){
    mockService.dynamicMock(request, response);
}
  • Service
@Override
public void dynamicMock(HttpServletRequest request, HttpServletResponse response) {

    String requestPath = request.getServletPath().replace("/mock","");
    // 下面这一行,替换为自己的业务代码,拿到想要的报文,响应代码,响应头等
    MockDO mockDO =  new LambdaQueryChainWrapper<>(mockMapper).eq(MockDO::getPath, requestPath).one();

	// 设置HttpServletResponse结果,这里只以“报文”和“响应代码”举例
    try {
    	// 设置报文
        OutputStream outputStream = response.getOutputStream();
        byte[] dataByteArr = mockDO.getResponseBody().getBytes(StandardCharsets.UTF_8);
        outputStream.write(dataByteArr);
        // 设置响应代码
        response.setStatus(mockDO.getResponseCode());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我们配置一个mock接口
在这里插入图片描述
状态码设置为405
在这里插入图片描述
然后去请求该接口(当然,这里要带上你自己服务器的url前缀),可以看到我们已经成功拿到了想要的报文信息和响应代码,mock已经可以通过以上方式进行动态配置。
在这里插入图片描述

在 Spring Boot 项目中实现接口自动返回 Mock 数据,通常可以通过以下几种方式来完成: ### 1. 使用 `@Mock` 和 `@InjectMocks` 模拟服务层行为 Spring Boot 提供了集成测试的支持,结合 `spring-boot-starter-test` 依赖,可以使用 `@Mock` 和 `@InjectMocks` 注解来模拟业务逻辑层的返回值,从而让接口返回预设的 Mock 数据。 例如,在测试类中可以定义如下内容: ```java @RunWith(MockitoJUnitRunner.class) public class UserControllerTest { @InjectMocks private UserController userController; @Mock private UserService userService; @Test public void testListUsers() { // 定义 Mock 返回数据 List<User> mockUsers = Arrays.asList(new User("Alice"), new User("Bob")); when(userService.list()).thenReturn(mockUsers); // 调用接口方法 ResponseEntity<List<User>> response = userController.list(); // 验证结果 assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(mockUsers, response.getBody()); } } ``` 这种方式适用于单元测试阶段对 Controller 接口进行验证,不涉及实际数据库操作[^1]。 --- ### 2. 利用 Swagger + EasyMock 实现前端可调用的 Mock 接口 若希望前后端分离开发时,前端能够直接调用接口而无需等待后端实现,可以结合 Swagger 与 EasyMock 工具生成 Mock 数据。具体步骤如下: - **启用 Swagger2**:在配置类中启用 Swagger 并定义 Docket Bean。 ```java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) .paths(PathSelectors.any()) .build(); } } ``` - **导出接口文档**:通过访问 `/v2/api-docs` 获取 JSON 格式的接口描述。 - **导入 EasyMock**:将上述 JSON 文件导入到 EasyMock 等在线工具中,自动生成 Mock 接口,并部署为独立服务供前端调用。 该方案实现接口设计先行、数据模拟同步进行的目标,有助于提高协作效率[^2]。 --- ### 3. 使用 `springdoc-openapi-ui` 自带的 Mock 功能(替代 Swagger UI) `springdoc-openapi-ui` 是一个现代的 OpenAPI 3 实现库,支持自动生成接口文档并提供内建的 Mock 数据功能。只需添加如下依赖即可启用: ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.6.9</version> </dependency> ``` 访问 `/swagger-ui.html` 页面时,可以直接点击“Try it out”按钮发送请求,系统会根据模型自动生成示例响应体作为 Mock 数据返回。 --- ### 4. 构建本地 Mock Server(如 WireMock) 对于更复杂的场景,还可以引入外部工具如 [WireMock](http://wiremock.org/) 来构建本地或远程的 Mock 服务器。它允许你定义 HTTP 请求/响应映射规则,完全脱离真实业务逻辑返回定制化数据。 示例配置文件 `mappings/example.json`: ```json { "request": { "method": "GET", "url": "/api/users" }, "response": { "status": 200, "body": "[{\"name\":\"Alice\"}]", "headers": { "Content-Type": "application/json" } } } ``` 启动 WireMock 后,所有匹配 `/api/users` 的 GET 请求都将返回预设的 JSON 数据。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值