天天看點

jackson json 嵌套對象_java – 使用Jackson轉換器将嵌套的json綁定到@RequestBody對象...

我有兩節課

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