【问题标题】:Jackson deserialize response of restfullyiiJackson 反序列化 restfullyii 的响应
【发布时间】:2013-10-18 14:08:07
【问题描述】:

我实际上有一些使用 PHP 中的 restfullyii 制作的网络服务。

但是我在用 jackson 反序列化我的 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;
}

}

为了反序列化用户,我使用这些行: (rst 是反序列化响应的结果)

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")" 在此模式中返回一个字符串: { 属性 = 值 } 确实,返回了以下异常:

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

您知道如何反序列化用户属性吗?

谢谢。

【问题讨论】:

    标签: java json serialization jackson


    【解决方案1】:

    我很猜测,但也许,既然你已经定义了一个 Map&lt;String, Object&gt;,你的用户应该已经反序列化为一个对象,也许你应该尝试强制转换它:

    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 注释!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 2019-09-17
      • 2021-01-19
      • 1970-01-01
      相关资源
      最近更新 更多