我在将JSON对象转换为POJO对象时遇到问题。 我的POJO对象就是这个:
public class User {
private String firstName;
private String gender;
private String id;
private PswUser psw;
private String state;
...
}
User对象位于另一个对象PswUser:
中public class PswUser {
private String id;
private String psw;
private String salt;
...
}
我尝试将User
的JSON表示转换为我的User.class
对象,如下所示:
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(myjson.toString(), User.class);
但我一直收到这个错误:
java.lang.IllegalArgumentException:field psw的类型为PswUser,java.Util.LinkedHashMap
我发现让它工作的唯一方法是从我的json中删除“psw”对象,解析PswUser,然后再将PswUser添加到用户,如下所示:
JSONObject pswJson = json.getJSONObject("psw");
json.remove("psw");
User user = mapper.readValue(json.toString(), User.class);
PswUser pswuser = mapper.readValue(pswJson.toString(), PswUser.class);
user.setPsw(pswuser);
然而,这对我来说是一个糟糕的解决方案,我有更复杂的对象,我必须解析,每次这样做都是一个大问题。
更新:
这是我输入的json:
{"firstName":"Mark","psw":{"id":"ag5zfmRlYnVn","psw":"01f0047c","salt":"597948b852bba"},"state":null,"id":"ag5zfm","gender":"male"}
更新2:
问题是由于我从appengine服务器获取User.class和PswUser.class,导入jar。 所以我的客户端代码能够转换我的User对象,但是如果里面有另一个复杂的对象,它就无法转换它。
答案 0 :(得分:1)
我终于找到了解决问题的方法。 我使用JacksonFactory类来解析我的JSON字符串:
JacksonFactory factory = new JacksonFactory();
User user = factory.fromString(json.toString(), User.class);
我使用的导入是:
import com.google.api.client.json.jackson2.JacksonFactory;