4

我有一个Update对象的实例,我想将它转换为它的字符串 JSON 表示,以便以后可以使用它。

我创建了这样的更新对象:

Update update = new Update();
update.set("field", new SomeClass());
update.unset("otherField");
// etc

我最初的尝试是:

update.getUpdateObject().toString();

这种方法适用于大多数情况,但偶尔会失败,因为它无法序列化SomeClass. 这是堆栈跟踪:

java.lang.RuntimeException: json can't serialize type : class com.example.SomeClass
at com.mongodb.util.JSON.serialize(JSON.java:261)
    at com.mongodb.util.JSON.serialize(JSON.java:115)
    at com.mongodb.util.JSON.serialize(JSON.java:161)
    at com.mongodb.util.JSON.serialize(JSON.java:141)
    at com.mongodb.util.JSON.serialize(JSON.java:58)
    at com.mongodb.BasicDBObject.toString(BasicDBObject.java:84)

我有一个可用的实例,MongoTemplateMongoConverter我不确定如何使用这些类来完成这项任务。

问题是:

获取更新对象的 JSON 表示的正确方法是什么?

我正在使用 spring-data-mongodb 版本 1.1.0.M1。

4

2 回答 2

1

你可以通过使用来做到这一点,

Update update = new Update();

JSONObject jsonObject = new JSONObject(new SomeClass());

update.set("field",JSON.parse(jsonObject.toString()));
update.unset("otherField");

System.out.println(update.getUpdateObject().toString());
于 2012-11-19T05:20:22.133 回答
0

I've met the same problem, and solved by turning SomeClass into DBObject:

DBObject dbObject = new BasicDBObject();
dbObject.put("fieldA", "a"); // set all fields of SomeClass
...

update.set("field", dbObject);
于 2016-12-12T01:33:58.897 回答