获取JSON映射时出错<;字符串,对象>;使用SpringMVC和Jackson2
我试图得到一张地图,其中有一个带有动作数量的'number',还有一个带有动作列表的'actions'。 我检查了java中的操作列表,它运行得很好 我有4个动作,在json文件中,我只做了第一个动作 java中的控制器获取JSON映射时出错<;字符串,对象>;使用SpringMVC和Jackson2,json,spring,spring-mvc,jakarta-ee,jackson,Json,Spring,Spring Mvc,Jakarta Ee,Jackson,我试图得到一张地图,其中有一个带有动作数量的'number',还有一个带有动作列表的'actions'。 我检查了java中的操作列表,它运行得很好 我有4个动作,在json文件中,我只做了第一个动作 java中的控制器 @RequestMapping(value = "/getactions/{idTask}", method = RequestMethod.GET, produces = "application/json") @ResponseBody public Map<Stri
@RequestMapping(value = "/getactions/{idTask}", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public Map<String, Object> getActions(Principal principal,
@PathVariable Long idTask) {
logger.info("Task controller get actions...");
List<TaskAction> actions = null;
if (principal == null) {
actions = new ArrayList<TaskAction>();
} else {
actions = taskActionService.getAllTaskActions(idTask);
}
System.out.println(">>>>>>>>Task Controller - Actions>>>>>>>>>>>>> "
+ actions.size());
for (TaskAction ta : actions) {
System.out.println(">>>>>>>>ta: " + ta.getActionname());
}
System.out.println(">>>>>>>>END getAllActions()>>>>>>>>>>>>> ");
Map<String, Object> data = new HashMap<String, Object>();
data.put("actions", actions);
data.put("number", actions.size());
return data;
}
我没有得到任何错误,但json结果只获取操作列表中的第一个元素和其余操作的id
我从http获取的json…getactions/8
{
"number":4,
"actions":[
{ ... },
3,
4,
5
]
}
这个。。。是第一个恢复良好的动作。(为了清晰起见,我避免编写代码)
你知道会是什么吗
提前谢谢
带有两个操作的json示例
{
"number": 2,
"actions": [{
"idTaskAction": 4,
"task": {
"idTask": 8,
"taskname": "abbbbbbbbbbbbbb",
"description": "fffffffffffffffqqqqq",
"date": 1389569940000,
"deadline": -23918633280000,
"category": {
"idTaskCategory": 1,
"sortOrder": 0,
"categoryname": "cat1",
"timestamp": 1402437394000
},
"priority": {
"idTaskPriority": 1,
"sortOrder": 0,
"aka": "none",
"priorityname": "low",
"timestamp": 1402437527000
},
"state": {
"idTaskState": 1,
"statename": "pending"
},
"user": {
"idUser": 1,
"username": "joe"
},
"userResponsible": {
"idUser": 1,
"username": "joe"
},
"evaluation": "12345678saad",
"pending": 0,
"actions": [{
"idTaskAction": 2,
"task": 8,
"date": 1402652358000,
"actionname": "tacometer",
"description": "asfdafa",
"duration": 12,
"user": {
"idUser": 1,
"username": "joe"
},
"timestamp": 1411493866000
},
{
"idTaskAction": 3,
"task": 8,
"date": 1404207558000,
"actionname": "hola",
"description": "un dos tres",
"duration": 20,
"user": {
"idUser": 1,
"username": "joe"
},
"timestamp": 1405022827000
},
4,
{
"idTaskAction": 5,
"task": 8,
"date": 1412164741000,
"actionname": "other action",
"description": "ya me my",
"duration": 22,
"user": {
"idUser": 1,
"username": "joe"
},
"timestamp": 1411733131000
}],
"timestamp": 1411733131000
},
"date": 1412074440000,
"actionname": "hi there",
"description": "lkjñlkj ya",
"duration": 25,
"user": {
"idUser": 1,
"username": "joe"
},
"timestamp": 1411733090000
},
5]
}
问题是类任务、用户。。。具有带有ObjectedGenerator.PropertyGenerator.class选项的@JsonIdentityInfo,因此当Jackson尝试将对象序列化为json时,如果对象已在文件中,则不会再次添加该对象。这样可以避免使用无限递归序列化json文件 为了解决这个问题,我们需要更改ObjectedGenerator.None.class的ObjectedGenerator.PropertyGenerator.class,这样即使对象已经是其他对象的一部分,也可以序列化这些对象 改变
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "@id")
为了
你能采取行动吗?如果是,java的输出是什么?您如何使用action object创建file.json?@Benjamin Spring在javaee上工作。没有javaee,Spring就无法工作。你在哪里被误导了?@Ashish是的,我在java中获取操作,通过url…/getactions/x获取json文件。Jackson创造了魔法,将地图翻译成json。现在我发布了我得到的java sysout。所以我假设将java对象转换为JSON对象的逻辑在getAllTaskActions中?该函数是List getAllTaskActions(long idTask)和return List。这里有一个简单的杰克逊的例子
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "@id")
@JsonIdentityInfo(generator = ObjectIdGenerators.None.class, property = "@id")