当前位置: 首页 > 知识库问答 >
问题:

使用jsonPath检查映射键/值

云霖
2023-03-14

我正在测试返回地图的控制器

@RequestMapping("/")
@ResponseBody
public Map<String, String> getMessages(@RequestBody String foo) {
    Map<String, String> map = boo.getMap(foo);
    return map;
}

测试:

...
resultActions
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(
                content().contentTypeCompatibleWith(
                        MediaType.APPLICATION_JSON))
        .andExpect(jsonPath("$", notNullValue()))
        .andExpect(jsonPath(EXPRESSION, equalsTo(foo));
 ...

我应该使用哪个表达式从映射中读取键和值?

编辑:解决这个问题的方法可能是:

MvcResult result = resultActions.andReturn();
MockHttpServletResponse response = result.getResponse();
String content = response.getContentAsString();
Gson gson = new Gson();
Type typeOfT = new TypeToken<Map>() {
}.getType();
Map<String, String> map = gson.fromJson(content, typeOfT);

然后循环通过地图检查值。但是,有没有一种方法可以使用<code>jsonPath</code>来实现这一点?

共有1个答案

谭昕
2023-03-14

如果您使用的是hamcrest匹配器,这非常简单。有两种方法可以获得地图条目的键或值。

>

  • Matchers.hasKey()

    Matchers.hasValue()

    还有一个简单的示例来检查生成的 Map 中是否存在所有键。$.translation属性直接指向地图。

     ResultActions resultActions = mvc.perform(...);
     List<String> languagesToBePresent = new ArrayList<>(); //add some values here
    
     for (String language : languagesToBePresent) {
                resultActions.andExpect(
                      jsonPath("$.translationProperties", Matchers.hasKey(language)));
            }
    

  •  类似资料:
    • 问题内容: 我有需要检查的情况。我有一个名为: 因为该键本身不存在,所以抛出。如果我检查 由于引发了另一个。如何测试地图中的键不存在?我知道该方法应该处理它,但这不在我的控制之下。] 问题答案: 即使现在我也因为.get引发异常而得到nullpoiner 如果只有一行,并且确定它抛出异常,则唯一的可能性可能是null。

    • 我写了Spring控制器Junits。我使用JsonPath通过< code>["$..id"]。 我有以下作为测试方法: 以下是我传递的数据:- 我收到的失败消息如下:- 问题是:如何使用<code>org.hamcrest处理JSONArray。匹配器 是否有任何简单的方法来使用jsonPath。 设置:-,,

    • 假设我们有一个键-值映射的数据结构,其中键本身也是一个键-值映射。例如: 现在,假设我们要查询此映射中与键的某个键值子集匹配的所有顶级键/值。示例: 我们的查询是“给我所有key值,其中key包含,它将返回第一个和第三个值将返回所有同时具有和的键值,生成第二个值。显然,我们可以在每一个查询的完整地图中进行搜索,但我正在寻找比这更高效的方法。 我四处查看了一下,但是找不到一个高效、易用的C解决方案。

    • 在查看几个不同的文档时,我只看到地图(ECMAScript6)键是布尔值、字符串或整数。有没有一种方法可以使用另一个定制的对象(用新的CustomObject(x, y)构造函数调用调用)作为键添加? 我可以添加一个对象作为密钥,但无法检查地图是否有所述对象。 有办法解决这个问题吗? https://developer.mozilla.org/en-US/docs/Web/JavaScript/R

    • 如何检索由jsonPath(). getMap返回的map的值放心的方法我正在尝试在Map中获得下面api上的响应,我能够成功地获得但是当我尝试访问下面代码中键"id"的值时,我在"String id=test.get("id")上遇到了铸错误;" 错误 我试过做很多事情,比如 但这无助于解决问题 API响应如下

    • 我有两个字符串值ID和值来自我的代码,我需要将其存储在映射中,而不是遍历映射,而是通过检查键值是否存在于映射中。ID可以多次使用不同的值,在这种情况下,我将它添加到ID的现有条目中,并将值与现有值一起添加 我用String和List创建了一个映射来添加值,但我面临着困难, Map >accessMap=new HashMap >(); 如果键不存在,则添加一个带有ID和值的新条目(作为列表)。 如