检查所有JSON属性值类型的最佳方法是什么?

检查所有JSON属性值类型的最佳方法是什么?,json,spring,junit,jsonpath,assertj,Json,Spring,Junit,Jsonpath,Assertj,我试图在集成测试中检查来自某个特定属性的所有值是否具有相同的类型。我试着用jsonPath和JsonPathResultMatchers来做,但没有成功。最后,我做了这样的事情: MvcResult result = mockMvc.perform(get("/weather/" + existingCity)) .andExpect(MockMvcResultMatchers.status().isOk()) .andRetu

我试图在集成测试中检查来自某个特定属性的所有值是否具有相同的类型。我试着用jsonPath和JsonPathResultMatchers来做,但没有成功。最后,我做了这样的事情:

MvcResult result = mockMvc.perform(get("/weather/" + existingCity))
                 .andExpect(MockMvcResultMatchers.status().isOk())
                 .andReturn();


String responseContent = result.getResponse().getContentAsString();
TypeRef<List<Object>> typeRef = new TypeRef<List<Object>>() {
};

List<Object> humidities = JsonPath.using(configuration).parse(responseContent).read("$.*.humidity", typeRef);
Assertions.assertThat(humidities.stream().allMatch(humidity -> humidity instanceof Integer)).isTrue();
MvcResult result=mockMvc.perform(get(“/weather/”+existingCity))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
字符串responseContent=result.getResponse().getContentAsString();
TypeRef TypeRef=新的TypeRef(){
};
List humidities=JsonPath.using(configuration).parse(responseContent).read(“$.*.humidity”,typeRef);
Assertions.assertThat(humidities.stream().allMatch(湿度->湿度实例的整数)).isTrue();

但我想知道是否有更清晰的方法来实现这一点,JSONPath能否实现同样的结果?或者AssertJ有一些方法可以在不使用流代码的情况下找到它

我个人更愿意根据。有一些方法可以帮助您

我个人更愿意用一个测试来验证它。有一些方法可以帮助您

回答AssertJ部分:
断言提供了一些警告,因为测试中的
被转换为
列表
,以便能够执行多个断言(否则不能执行,因为流只能使用一次)

Javadoc:

例如:

assertThat(DoubleStream.of(1, 2, 3)).isNotNull()
                                    .contains(1.0, 2.0, 3.0)
                                    .allMatch(Double::isFinite);

我很乐意检查JSON,您可以尝试一下,看看您是否喜欢它。

仅回答AssertJ部分:
断言提供了一些警告,因为测试中的
被转换为
列表
,以便能够执行多个断言(否则您不能,因为流只能消费一次)

Javadoc:

例如:

assertThat(DoubleStream.of(1, 2, 3)).isNotNull()
                                    .contains(1.0, 2.0, 3.0)
                                    .allMatch(Double::isFinite);
我很乐意检查JSON,您可以尝试一下,看看您是否喜欢它