我正在测试休息控制器。这是测试代码:
mockMvc.perform(get("/index/get-all"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$",hasSize(2)));
我得到回复正文:
Body = [{"id":"123"},{"id":"1234"}]
我得到错误:
java.lang.AssertionError: No value at JSON path "$", exception: net/minidev/json/writer/JsonReaderI
我做错了什么?
答案 0 :(得分:3)
你的身体返回一个带有对象的数组。要在Spring MVC Test中访问每个对象,请使用以下断言:
.andExpect(jsonPath("[0].id").value("123"))
.andExpect(jsonPath("[1].id").value("1234"))
答案 1 :(得分:0)
得到同样的错误。 尝试在依赖项中使用较高版本的json-smart,并从包含json-smart的程序包中排除较低版本。对我来说,我将依赖关系更改为:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.2.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>json-smart</artifactId>
<groupId>net.minidev</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>2.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
答案 2 :(得分:0)
仔细检查您的网址:“ / index / get-all”,并确保您使用的是控制器类的完整路径。我遇到了同样的问题,因为我的网址缺少路径的一部分(“ / Folder /”)。我一直在使用的是“ / folderId = 1234”,并且意识到我忘记在类的顶部添加控制器的@RequestMapping注释部分,因此应该是“ / Folder / folderId = 1234”。
示例控制器代码
@RestController
@RequestMapping ("/Folder")
public class FolderController {
@RequestMapping (value = "/folderId={Id}", method = RequestMethod.GET)
public Folder getFolderById (@PathVariable String folderId, HttpSession session)
{
// controller code
}
}
我使用的网址不正确。
mockMvc.perform(
get("/folderId=1234")
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$",hasSize(2)));
正确的网址。
mockMvc.perform(
get("/Folder/folderId=1234")
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$",hasSize(2)));
答案 3 :(得分:0)
我遇到过堆栈跟踪指示与您的错误类似的情况:
java.lang.AssertionError: No value at JSON path "$[0].contentId"
Caused by: java.lang.NoClassDefFoundError: net/minidev/json/writer/JsonReaderI
我发现这个帖子:https://github.com/json-path/JsonPath/issues/159#issuecomment-411306322 引起了我的注意。我在我的项目中使用了 net.minidev:json-smart:1.1.1。
我所做的只是将版本更新到 2.3,问题就解决了。