0
我想通過使用Grail的MongoDB插件將通用JSONObject保存到域對象。基本上它不適用於常規屬性(不奇怪)。所以我添加了一個動態屬性,將JSONObject保存到數據庫並將其拉回(yay)。但是,由於我用Jackson序列化程序替換了默認的JSON序列化程序(由於MongoDB Plugin和Domain對象的不良行爲),動態屬性未被序列化。JSON對象,動態屬性和序列化與Grails和MongoDB
我可以使用哪些API來獲取添加到域的所有動態屬性以序列化它? Object.properties()不返回它。我找不到任何其他方法來返回它。我必須修改Jackson以現在序列化Grails對象。任何想法如何可能是最簡單的?
這是我的目標:
class ProblemAttempt {
static final STEP_GUIDED = 'guided'
static final STEP_INDEPENDENT = 'independent'
static constraints = {
timeSpent nullable: true
}
static mapWith="mongo"
static mapping = {
lessonAttemptId index: true
}
static embedded = ['tags']
ObjectId id
ObjectId problemId
ObjectId userId
String lessonExternalId
ObjectId lessonAttemptId
Date timeAnswered
String stepName
Boolean correct
Integer timeSpent
String lessonStatus
List<String> tags
ProblemAttempt(User user, String lessonExternalId, LessonAttempt attempt, String stepName, ObjectId problemId, boolean correct, Object answer) {
this.userId = user.id
this.lessonExternalId = lessonExternalId
this.correct = correct
this.lessonAttemptId = attempt.id
this.lessonStatus = LearningStatus.INCOMPLETE
this.problemId = problemId
this.stepName = stepName
this.timeAnswered = new Date()
this['answer'] = answer // have to use dynamic properties to persist generic JSON objects
tags = []
user.aspects.each {ProfileAspect aspect ->
tags << aspect.class.simpleName
}
user.groups.each {DomainReference group ->
tags << group.name
}
}
public Object getUserAnswered() {
return this['answer'] // this was added to handle serializing into json
}
}
你可以添加一個例子,你現在有什麼域對象(動態屬性)? – dmahapatro
我添加了該對象,並且您可以看到動態屬性以及我的解決方案,該解決方案將添加一個不同的getter,供序列化程序用來將該對象發送到客戶端。但是,這個getter不會被保存到數據庫中,因爲MongoDB沒有嵌入它,所以忽略它。 – chubbsondubs
這個解決方案的問題是我似乎無法在單元測試中使用動態屬性。我試圖遷移到集成測試,但也失敗了。所以我仍然有興趣找到一個不使用動態屬性的解決方案。 – chubbsondubs