杰克逊泽西JSON

时间:2014-01-22 17:50:40

标签: java json jersey jackson

我正在尝试使用Jersey和Jackson(尽管其他任何方式进行JSON编组工作)以某种形式将其导入我的系统(无论是POJO还是其他表示)。

基本上我只需要数据部分。我试图将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(“Authorization”,getToken())。get(WDCOResponse.class);

但它仍无效。

EDIT2: 想出来了!谢谢大家。 :)

我必须添加注释以告诉它忽略如果找不到某些东西,我回来的一些JSON没有完全形成,因为并非所有字段都是绝对必要的。

2 个答案:

答案 0 :(得分: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;
    }

}

如果您仍然收到错误,请提供详细的错误或问题。谢谢!

答案 1 :(得分:0)

您可以使用POJO:

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

并从那里访问数据:

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