似乎找不到在Grails应用中捕获MySQL索引违规的正确方法。来自控制器的代码:
try {
configurationInstance.save(flush: true) {
request.withFormat {...}
}
catch (JDBCException exception) {
flash.error = "This would be a duplicate attribute, please change the suffix."
render view: 'edit', model: [exception: exception]
}
当我通过提交重复值来激发错误条件时,会忽略catch块,并且我会得到一个500错误页面,其中包含以下详细信息:
URI / itools / configuration / save
类com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
消息重复条目'1009303-photo-recommendedable-exclusion-pattern.2-0'用于密钥'publisher_config_uk'
在控制台中我得到了: ERROR errors.GrailsExceptionResolver - 处理请求时发生MySQLIntegrityConstraintViolationException:[POST] / itools / configuration / save - 参数: 我试图抓住
一切都无济于事。 (FWIW我还对有问题的属性应用了唯一约束,并且在它应该导致验证错误时什么都不做。这是一个完全不同的问题。)
这样做的正确方法是什么?
答案 0 :(得分:0)
找到它:它是DuplicateKeyException。
(我必须抓住通用的Exception并查看它的详细信息才能找到它。)
现在我遇到了一个新问题:在尝试渲染或重定向时,我在itools.Configuration条目中获得“null id”(在发生异常后不要刷新会话)。“这对我来说毫无意义 - 由于重复键,新实体从未保存到数据库中,为什么null ID对象会成为问题?