2014-01-22 170 views
1

我试图使用新泽西州和杰克逊(虽然这样做JSON在分解作品的任何其他方式)进入我的某种形式的系统中,这(无论是POJO或者一些其他表示)。杰克逊泽西JSON

基本上我只需要数据部分。我试图用列表的GenericTypes,但这是一个嵌套列表,我只是不知道该怎么做。很多荣誉的帮助,我真的很感激它!

{ 
    "total": 4, 
    "data": [ 
     { 
      "descriptor": "", 
      "multiInstance": false, 
      "active": false 
     }, 
     { 
      "descriptor": "Apparel", 
      "multiInstance": true, 
     }, 
     { 
      "descriptor": "abcd123", 
      "multiInstance": false, 

     }, 
     { 
      "descriptor": "abcd", 
      "multiInstance": false, 
     } 
    ] 
} 

这是我正在尝试使用的类。我需要一个班级名单。

public class customObject { 

@JsonProperty(value = "descriptor") 
private String descriptor; 
@JsonProperty(value = "multiInstance") 
private Boolean multiInstance; 

//getters and setters 
} 

编辑:

我使用它在这里。

CustomObjectResponse WDCOResponse = 资源 .TYPE(MediaType.APPLICATION_JSON) 。接受(MediaType.APPLICATION_JSON) .header( “授权”,为gettoken())得到(WDCOResponse.class)。

但它仍然无法正常工作。

编辑2: 想通了!谢谢大家。 :)

我不得不添加注释来告诉它忽略,如果没有被发现的东西,一些我找回了JSON并没有完全形成,并非所有的领域是绝对neccesary。

+0

您是否尝试使用http://www.jsonschema2pojo.org/? – MariuszS

回答

1

如果您提供的对象是要传递什么到你的控制器,那么你将需要一个包装对象来包含这样的列表:

public class CustomRequest { 

    @JSonProperty(value = "total"); 
    private Integer total; 

    @JsonProperty(value = "data") 
    private List<CustomObject> data; 

    // getters/setters 

} 


public class CustomObject { 

    @JsonProperty(value = "descriptor") 
    private String descriptor; 

    @JsonProperty(value = "multiInstance") 
    private Boolean multiInstance; 

    // getters/setters 
} 

然后你的控制器将只有一个表示RequestBody是CustomRequest类的记号:

@Controller 
public class JSONController { 

    @RequestMapping(value="sendData") 
     public @ResponseBody CustomResponse sendData(
      @RequestBody CustomRequest request) 
    { 
    return null; 
    } 

} 

如果仍然出现错误,请提供详细的错误或问题。谢谢!

+0

所以我实际上是试图格式化从另一个API来JSON信息。我正在构建一个客户端API。我正在做你所拥有的,但它不起作用,我只是跳出来。我假设有一个例外,所以我要通过添加一个将打印出来的异常捕获器来查看这个异常。 –

0

你会使用POJO,如:

public class Response { 
    int count; 
    List<customObject> data; 
} 

和访问数据从那里:

for (customObject ob : response.data) { 
    // process ig 
}