【发布时间】:2023-04-02 07:50:01
【问题描述】:
我有两个问题:
首先,我正在尝试使用 Junit4 测试申请后,我有这样的事情:
@Test
public void postTest()
{
final String contentToSave = new String(Files.readAllBytes(Paths.get("src/test/resources/savePost.json")));
final ObjectNode jsonContentToSave = (ObjectNode) objectMapper.readTree(contentToSave);
mockMvc.perform(post(apiContext
+ "/url/default/").session(httpSession).contentType(MediaType.APPLICATION_JSON_VALUE)
.content(jsonContentToSave.toString()))
}
此代码在其他请愿书中对我有用,如果我使用这种类型的 JSON,则会抛出异常
[
{
"color": "white",
"jobs": {
"name": "default",
"time": 40
},
"number": 4
}
]
错误:
java.lang.ClassCastException:com.fasterxml.jackson.databind.node.ArrayNode 类无法转换为 com.fasterxml.jackson.databind.node.ObjectNode 类(com.fasterxml.jackson.databind.node.ArrayNode 和com.fasterxml.jackson.databind.node.ObjectNode 位于加载程序“app”的未命名模块中)
我对 Jackson 的另一个问题是反序列化这个 json,我尝试了类似的方法,但根本找不到:
public static List<ObjectClass> jsonToObject(final JsonNode jsonData){
ObjectMapper objectMapper = new ObjectMapper();
List<ObjectClass> myObjects = null;
try{
myObjects = objectMapper.readValue(jsonData.textValue(),
new TypeReference<List<ObjectClass>>() {
});
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return myObjects;
}
我是杰克逊的菜鸟,因此,欢迎所有建议,谢谢!!
【问题讨论】:
-
嗨,我今天没有太多时间解释它,但我已经创建了一个示例来解决你的问题,你可以在这里找到它github.com/marcosbarbero/…
-
嗨@MarcosBarbero,我阅读了您的代码,对此有一些疑问。如果我需要获取一个 List
会发生什么,只需将 (@RequestBody Person person) 更改为 (@RequestBody List person) 就足够了?并感谢您回答我! -
很遗憾,我接下来的几天都不在电脑前,您只需将 RequestBody 更改为期望人员列表并在执行您的请求时发送一个数组
标签: java spring-boot junit jackson