使用 Jackson 转换器将嵌套 json 绑定到 @RequestBody 对象
我有两个类
public class Parent {
private String name;
private int age;
private ArrayList<Child> children = new ArrayList<Child>();
//Setters and getter to follow..
}
public Class Child {
private String name;
private int age;
}
Spring 配置包括:
<bean id="jsonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonMessageConverter" />
</list>
</property>
</bean>
控制器如下所示:
@RequestMapping(value = "/parents",
method = RequestMethod.POST,
headers="Content-Type=application/json")
public @ResponseBody Parent add(@RequestBody Parent parent, Model model) {
logger.debug("Received request to add a parent");
Parent tempParent = parentService.add(parent); // This will persist the parent object to the DB.. (Helper class)
return tempContract;
}
在正常情况下,它应该将传入的 json 绑定到 Parent 并在响应中将 Parent 作为 Json 返回。它给了我一个例外:“客户端发送的请求在语法上不正确。”使用以下输入 Json:
{
"name" : "foo",
"age" : "45",
"children" : [
{
"name" : "bar",
"age" : "15""
},
{
"name" : "baz",
"age" : "10""
}
]
}
所以尝试更改 json,它可以很好地使用以下格式绑定 @RequestBody 和 @ResponseBody:
{
"name" : "foo",
"age" : "45",
"children" : []
}
所以
{
"name" : "foo",
"age" : "45",
"children" : [
{}
]
}
我假设实际的子类或我的方式有问题将 Json 对象传递给 Child 对象。有人可以帮我吗?另外,是否建议使用
private ArrayList<HashMap<String, Child>> children = new ArrayList<HashMap<String, Child>>();
而不是
private ArrayList<Child> children = new ArrayList<Child>();
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通过添加以下逻辑解决了该问题。
这里你的Java类 DrugListJsonRequest 应该扩展
它不需要任何方法和构造函数。
The issue was fixed by adding below logic.
Here your Java class DrugListJsonRequest should extend
It doesn't require a any methods and constructors.
问题中更新的 JSON 示例仍然无效。我建议使用 JSONLint.com 检查 JSON 示例。
以下是使用 Jackson 将正确版本的 JSON 反序列化为当前问题版本中相同的父/子类结构的示例。
关于语法错误的消息是否有可能只是:关于语法错误的消息?具体来说,关于无效的 JSON 输入?或者真正的 JSON 实际上是有效的,而只是问题中的示例无效?
否,JSON结构不匹配
ArrayList>
。所以,我不会尝试使用它。The updated JSON example in the question is still invalid. I recommend checking JSON examples with JSONLint.com.
Following is an example of using Jackson to deserialize a corrected version of the JSON into the same Parent/Child class structure in the current version of the question.
Is it possible that the message about the syntax error is just that: a message about a syntax error? Specifically, about the invalid JSON input? Or is the real JSON actually valid, and just the examples in the question are invalid?
No. The JSON structure doesn't match
ArrayList<HashMap<String, Child>>
. So, I wouldn't try to use it.人们首先会猜测儿童年龄中15岁和10岁之后的杂散引语。是什么产生了你的输入?
One would first guess the stray quotes after 15 and 10 in the children's ages. What's generating your input?