将Spring Mongo Update转换为JSON String

时间:2012-10-03 00:15:21

标签: java spring mongodb spring-data spring-data-mongodb

我有一个Update对象的实例,我想将其转换为String 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的实例,但我不确定如何使用这些类来执行此任务。

问题是:

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

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

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

我遇到了同样的问题,并将SomeClass转为DBObject解决了问题:

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

update.set("field", dbObject);