杰克逊反对restfullyii的反应

时间:2013-10-18 14:08:07

标签: java json serialization jackson

我实际上在PHP中使用restfullyii进行了一些Web服务。

但是我有一些麻烦来反对我的网络服务与杰克逊的反应。

这是回复的一个例子:

{"success":true,"message":"Record(s) Found","data":{"totalCount":"1","user":{...}}}

要反序列化此响应,我创建此模型:

@JsonIgnoreProperties(ignoreUnknown = true)
public class response {

@JsonProperty("data")
private HashMap<String, Object> data;

@JsonProperty("message")
private String message;

@JsonProperty("success")
private Boolean success;

public HashMap<String, Object> getData() {
    return data;
}

public void setData(HashMap<String, Object> data) {
    this.data = data;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public Boolean getSuccess() {
    return success;
}

public void setSuccess(Boolean success) {
    this.success = success;
}

}

要反序列化用户,我使用以下行: (第一个是反序列化响应的结果)

ObjectMapper mapper = new ObjectMapper();
            try {

                String rstTxt = String.valueOf(rst.getData().get("user"));
                System.out.println(rstTxt);
                user user = mapper.readValue(rstTxt, user.class);
            } catch (JsonParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JsonMappingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 

但它不起作用,因为“rst.getData()。get(”user“)”在此架构中返回一个字符串: {attribute = value} 实际上,返回以下异常:

org.codehaus.jackson.JsonParseException: Unexpected character ('i' (code 105)): was expecting double-quote to start field name

您是否了解如何反序列化用户属性?

谢谢。

1 个答案:

答案 0 :(得分:0)

我很猜测,但也许,因为你已经定义了一个Map<String, Object>,你的用户应该已经被反序列化为一个对象,也许你应该试着去投射它:

User user = (User) rst.getData().get("user");

否则您可以略微修改您的代码以完全匹配响应,例如:

public class Response {
    private String message;
    private Boolean success;
    private Data data;
}

public class Data {
    private String totalCount;
    private User user;
}

通过这种方式,您应该可以立即对所有内容进行反序列化。

提示:如果您的变量名相同,则不需要@JsonProperty注释!