Java JsonPathResultMatchers无法成功验证响应

Java JsonPathResultMatchers无法成功验证响应,java,junit,integration-testing,Java,Junit,Integration Testing,为什么JsonPathResultMatchers无法成功验证响应? 测试 private static final UUID TRANSACTION_UUID_ONE = UUID.fromString("336ca9de-1583-4f39-9c67-f8380323d09d"); restBalanceMockMvc.perform(put("/api/balance") .contentType(TestUtil.APPLICATION_JSON_UTF8)

为什么JsonPathResultMatchers无法成功验证响应? 测试

private static final UUID TRANSACTION_UUID_ONE = UUID.fromString("336ca9de-1583-4f39-9c67-f8380323d09d");

restBalanceMockMvc.perform(put("/api/balance")
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(transaction)))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.transactionId").value(hasItem(TRANSACTION_UUID_ONE.toString())))
        .andExpect(jsonPath("$.errorCode").value(hasItem("")))
        .andExpect(jsonPath("$.balanceVersion").value(hasItem(UPDATED_BALANCE_VERSION)))
        .andExpect(jsonPath("$.balanceChange").value(hasItem(BALANCE_CHANGE)))
        .andExpect(jsonPath("$.balanceAfterChange").value(hasItem(BALANCE_AFTER_CHANGE)));
响应:

{"username":"player1","transactionId":"336ca9de-1583-4f39-9c67-f8380323d09d","balanceChange":2,"errorCode":"","balanceVersion":1,"balanceAfterChange":5.00}
错误

java.lang.AssertionError: JSON path "$.transactionId"
Expected: a collection containing "336ca9de-1583-4f39-9c67-f8380323d09d"
     but: was "336ca9de-1583-4f39-9c67-f8380323d09d"
Expected :a collection containing "336ca9de-1583-4f39-9c67-f8380323d09d"

Actual   :"336ca9de-1583-4f39-9c67-f8380323d09d"
需要一个Hamcrest
匹配器来计算该值

定义如下:

Iterables
创建匹配器,该匹配器仅在通过检查的
Iterables
生成至少一个等于指定
项的项时匹配

JSON中的
transactionId
是一个常规字符串而不是集合,因此这里不能使用
hasItem()

试一试

jsonPath("$.transactionId").value(equalTo(TRANSACTION_UUID_ONE.toString()))
或者只是

jsonPath("$.transactionId").value(TRANSACTION_UUID_ONE.toString())