爲了支持UTFMB8 encoding我添加了以下默認約束在Config.groovy
添加約束插件域類
grails.gorm.default.constraints = {
'*'(maxSize: 191)
unlimitedSize(maxSize: Integer.MAX_VALUE)
}
我還添加了unlimitedSize
共享的約束,我在我的一些領域類的使用覆蓋此默認情況下,例如
class BlogPost {
String body
static constraints = {
body shared: 'unlimitedSize'
}
}
然而,也有插件幾類,也需要覆蓋默認的191 maxSize
在這種情況下,我不能使用共享的約束,因爲我不能編輯源代碼。一種選擇是將類複製到我的應用程序中,並編輯這些副本(因爲應用程序中的工件會覆蓋插件中的工件),但這不是很吸引人,因爲我已經有效地分叉了這些類。
有沒有更好的方法?例如,是否可以在Bootstrap.groovy
中爲這些域類添加約束條件?
class BootStrap {
def grailsApplication
def init = { servletContext ->
grailsApplication.domainClasses.each { GrailsDomainClass gdc ->
Class domainClass = gdc.clazz
if (domainClass.simpleName == 'BookFromPlugin') {
def field = domainClass.declaredFields.find {
it.name == 'body' && it.type == String
}
if (field) {
domainClass.constraints.body.maxSize = Integer.MAX_VALUE
}
}
}
}
}
其中BookFromPlugin
是插件和body
域類是從域類的屬性:
有一些小的變化,它的工作原理,謝謝!但是,我認爲'domainClass.constraints'正在訪問一個私人變量,這有點頑皮。我想知道是否有可能在不訪問私人領域的情況下獲得相同的結果? –
感謝編輯和對不起,我沒有測試它在星期五晚上回家之前。 :)看看我的更新回答。對於評論太長了。 – dmahapatro
另請注意,我從示例中檢查了字符串的類型,以確保「maxSize」約束僅應用於String屬性。是在使用時產生噪音嗎? @唐 – dmahapatro