Spring Web 服务器在测试期间将 uri 的一部分视为路径变量

斯皮基

有两种类似的端点,让我们假设:POST devices/{uuid}/{imei}POST devices/{uuid}/device-info第一个是更新 UUID 指定的设备的 IMEI(通过路径变量传递),第二个是更新其其他参数(通过请求作为 json 主体传递)。

当服务器从 jar 文件“正常”工作时,两个端点都按照上面描述的方式正常工作,这是由 Postman 测试的。但是当我运行集成测试(使用 maven 或直接通过 IntelliJ)时,将 POST 请求发送到devices/{uuid}/device-info服务器端解释为对 的请求devices/{uuid}/{imei},其中短语“设备信息”被视为 IMEI 号码。

对于集成测试,我使用自动配置的MockMvc类和 SpringBootTest + Mockito + JUnit4 实用程序。webEnvironment设置为SpringBootTest.WebEnvironment.MOCK,一切都用SpringRunner.

我正在寻找解决方案,但实际上一无所获。有没有人遇到过类似的事情?

编辑:如果有帮助,我将添加 API 声明。

@ResponseStatus(value = HttpStatus.NO_CONTENT, reason = "Device info successfully updated")
@PutMapping(value = "/devices/{deviceUuid}/device-info", consumes = {"application/json"})
ResponseEntity<Void> updateDeviceInfo(@Valid @RequestBody DeviceInfo deviceInfo);

@ResponseStatus(value = HttpStatus.NO_CONTENT, reason = "Device IMEI successfully updated")
@PutMapping(value = "/devices/{deviceUuid}/{imei}")
ResponseEntity<Void> updateDeviceImei(@PathVariable("deviceUuid") UUID deviceUuid, @PathVariable("imei") String imei);

测试本身非常简单:

DeviceInfo deviceInfo = this.prepareDeviceInfo();
String url = String.format("/v3/devices/%s/device-info", super.firstDeviceUuid);
mvc.perform(put(url)
        .content(asJsonString(deviceInfo)))
        .andExpect(status().is(204));

asJsonString使用 Jackson 方法从对象准备 JSON 的简单辅助方法在哪里

斯皮基

我终于找到了答案。当我刚刚devices/{uuid}/{imei}在控制器中评论端点处理程序时,测试的结果状态是 415,所以看起来在控制器中没有找到处理程序。然后我找到了这个解决方案:Spring MVC 测试导致 415 错误,这对我来说非常有效。

我只是在我的测试用例中将内容类型设置MediaType.APPLICATION_JSON_UTF8如下,并且由于它在服务器端正确解释。

mvc.perform(put(url)
        .content(mapper.writeValueAsString(deviceInfo))
        .contentType(MediaType.APPLICATION_JSON_UTF8))
        .andExpect(status().is(204));

编辑:MediaType.APPLICATION_JSON也很好用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“找不到路径的一部分” asmx Web服务

如何在请求中转义正斜杠以使url路由器将其视为uri参数的一部分?

如何将表值包含为 URI 的一部分?

触发Spring Batch作为Web应用程序的一部分

将网站的一部分显示到Web浏览器中

部署Web应用程序期间出现错误“无法打开源文件:找不到路径的一部分”

Bash脚本无法将变量识别为路径的一部分

将JSON的一部分返回到对象Spring Boot

在测试期间是否应该模拟Spring Cloud Config服务器属性?

使用Spring进行集成测试期间模拟外部服务器

使用TCL剥离URI路径的一部分

如何为所有 Spock 集成测试模拟 Spring Boot 服务的一部分?

Web.config版本转换未作为Azure DevOps服务器中Web应用程序生成的一部分应用

在服务器上找不到路径错误的一部分

将Guid视为模拟器选择的一部分

将变量从代码的一部分传递到另一部分

将Regex表达式的一部分视为非特殊字符

如何将连字符视为整个单词的一部分

Excel-将大于或小于符号视为文本条件的一部分

在JAX-WS RI中懒惰地验证传入的Web服务请求的一部分

JS中的console.log是浏览器提供的Web Api的一部分吗

将%20作为url的一部分传递到Twitter Web Intent,但显示为''空白

Spring MVC“复制” URL的一部分

验证对象Spring的一部分

PowerShell 使用测试路径比较文件名的一部分

将消息概率转发到一部分服务器

忽略反应路由器中路径的一部分?

将文件的一部分替换为当前目录的路径

我可以将xargs用作目录路径的一部分吗?