json - spring MockMVC 中是否有一种方法可以将 json 内容作为对象获取?
问题描述
在我的 Spring 项目中,我创建了一些检查控制器/http-api 的测试。有没有办法将响应的 json 内容作为反序列化对象?
在其他项目中,我使用了“放心”和“有”的方法来直接获取预期对象的结果。
这是一个例子:
MvcResult result = rest.perform( get( "/api/byUser" ).param( "userName","test_user" ) )
.andExpect( status().is( HttpStatus.OK.value() ) ).andReturn();
String string = result.getResponse().getContentAsString();
该方法以 json 形式返回特定类型。如何将此 json 转换回对象以测试其内容?我知道杰克逊或放心的方法,但在 spring/test/mockmvc 中有方法吗
喜欢getContentAs(Class)
解决方案
据我所知MockHttpServletResponse
(与 RestTemplate 不同)没有任何方法可以将返回的 JSON 转换为特定类型。
所以你可以做的是使用 JacksonObjectMapper
将 JSON 字符串转换为特定类型
像这样的东西
String json = rt.getResponse().getContentAsString();
SomeClass someClass = new ObjectMapper().readValue(json, SomeClass.class);
这将使您有更多的控制权来断言不同的事情。
话虽如此,MockMvc::perform
return ResultActions
which 有一个方法,该方法andExpect
采用ResultMatcher
. 这有很多选项可以在不将其转换为对象的情况下测试生成的 json。
例如
mvc.perform( .....
......
.andExpect(status().isOk())
.andExpect(jsonPath("$.firstname").value("john"))
.andExpect(jsonPath("$.lastname").value("doe"))
.andReturn();
推荐阅读
- php - 错误 409 – 联系表单脚本和样式未加载
- amazon-web-services - 如何从私有服务器 scp 到 Amazon s3?
- javascript - Javascript:使用特定日期字符串初始化的 new Date() 返回不同时区的两个不同日期
- android - 我想使用 Exoplayer 创建可滚动的视频
- sql - 将 XML 数据插入到具有多个节点的 SQL 表中
- azure - 无法删除 B2C Azure 租户
- laravel - 如何根据状态更改事件背景颜色
- vue.js - JsFiddle 和 Codesandbox 中的 for 循环返回不同的结果。(Vue.js)
- python-3.x - 从文件中读取分数的程序
- python - 无法运行 TensorFlow | 加载图像示例(process_path 错误)