我实际上在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
您是否了解如何反序列化用户属性?
谢谢。
答案 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注释!