我有兩節課
public class Parent {
private String name;
private int age;
private ArrayList children = new ArrayList();
//Setters and getter to follow..
}
public Class Child {
private String name;
private int age;
}
Spring配置包括:
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
控制器如下所示:
@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對象wrt Child對象的方式上存在錯誤.有人可以幫幫我嗎.此外,它是否建議使用
private ArrayList> children = new ArrayList>();
代替
private ArrayList children = new ArrayList();
謝謝.
解決方法:
問題中更新的JSON示例仍然無效.我建議使用JSONLint.com檢查JSON示例.
以下是使用Jackson在目前版本的問題中将JSON的更正版本反序列化為相同的父/子類結構的示例.
import java.util.ArrayList;
import org.codehaus.jackson.map.ObjectMapper;
public class Foo
{
public static void main(String[] args) throws Exception
{
String jsonInput = "{\"name\":\"foo\",\"age\":\"45\",\"children\":[{\"name\":\"bar\",\"age\":\"15\"},{\"name\":\"baz\",\"age\":\"10\"}]}";
ObjectMapper mapper = new ObjectMapper();
Parent parent = mapper.readValue(jsonInput, Parent.class);
System.out.println(mapper.writeValueAsString(parent));
// output:
// {"name":"foo","age":45,"children":[{"name":"bar","age":15},{"name":"baz","age":10}]}
}
}
class Parent
{
public String name;
public int age;
public ArrayList children = new ArrayList();
}
class Child
{
public String name;
public int age;
}
有關文法錯誤的消息是否可能是:有關文法錯誤的消息?具體來說,關于無效的JSON輸入?或者真正的JSON實際上是否有效,隻是問題中的示例無效?
“is it suggested to use ArrayList>“
不.JSON結構與ArrayList< HashMap< String,Child>>不比對.是以,我不會嘗試使用它.
标簽:json,java,spring,jackson,binding
來源: https://codeday.me/bug/20190630/1338073.html