我有一个控制器,它在响应体中返回一个set
:
public ResponseEntity<?> getIds(){
Set<Long> ids = someFunc(..);
return ResponseEntity.ok(ids);
}
在我的测试中,我试图将rest调用的结果与不同的集
进行比较
MockHttpServletResponse result = mockMvc.perform(.....).andReturn().getResponse();
Set<Long> responseBody = objectMapper.readValue(result.getContentAsByteArray(), Set.class);
responseBody = responseBody.stream().map(number->number.longValue()).collect(Collectors.toSet());
assertThat(responseBody.equals(otherSet),is(true));
当我在调试模式下运行代码时,我看到responseBody包含整数对象。
我在映射行(map(number->number.longvalue())
)上得到的错误:
java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap')
对象映射器似乎将长对象转换为整数对象,因为它可以容纳在整数中。
我知道我可以使用:
新建ObjectMapper()。configure(deserializationFeature.use_long_for_ints,true);
但是我想找到一个解决方案,它将转换值,而不是在我的映射器上添加约束。
您可以将数据读取为set
。 使用TypeReference
指定要读取的类型,则不需要将integer
转换为long
Set<Long> responseBody = objectMapper.readValue(result.getContentAsByteArray(),
new TypeReference<Set<Long>>(){});
问题内容: 对于我的单元测试,我想检查两个数组是否相同。简化示例: 这是行不通的,因为。最好的进行方法是什么? 问题答案: 或者您可以使用或用: 编辑 由于您正在使用它进行单元测试,因此裸露(而不是将其包装成get )可能更自然。
上述情况导致 上述条件返回。 为什么会这样?这些片段之间有什么区别?
在引入比较器之前,输出是: 此代码生成的输出为: 我希望它产生的输出是: 编辑:为澄清而编辑。数组已更改,并在添加比较器之前输出。
问题内容: 我是Java的新手,我刚刚读了一个整数类的变量,可以用API的三种不同方式来描述。我有以下代码: 这是在循环内,只是输出。 我的目标是弄清楚如何查看整数值。 我知道这是正确的方法吗?还是它? 我知道这是不正确的。这是正确的吗?是否存在值比较运算符? 问题答案: 整数是自动拆箱的,因此您可以执行
我是泛型新手,想解决一个小问题。 我想给两个类型为“V扩展可比”的对象给类ComparePredicate,然后检查方法“isOk”,如果树类的int值“值”在这两个对象之间。我选择了comareTo方法,因为整数和V应该是可比较的类型,但是编译器给出了一个错误。我认为这只是一个句法问题。 那么,我需要如何正确地书写它呢。希望你们能帮我。谢谢你的回答。 类比较谓词 类树
问题内容: 在Java中整数比较是棘手的,因为和表现不同。我明白了。 但是,如本示例程序所示, (第4行)的 行为不同于 (第3行) 。为什么是这样?? 结果 问题答案: 从JLS 如果装箱的值p为true,false,字节或\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p的任何两次拳击转换。r1 == r2总是这样。 理想情况下,将给定的
我发现了一个有趣的事实,但我不知道是怎么发生的。
我正在用下面的代码比较两个整数对象....为什么输出是“Both Integer are not equal...”虽然我在某处读到过,Integer或int将只在-128到127的范围内相等。为什么不是128?