导致它的带有字段的 Grails NumberFormatException 或 GroovyCastException
Grails NumberFormatException or GroovyCastException with fields, that cause it
我在服务中抛出异常(尤其是这些验证异常)并在控制器中尝试捕获它们。我正在向
获取数据
在公司控制器中:
try{
def data = request.JSON
firmService.createAndSave(data)
}
catch(ValidationException exception){
}
在公司服务中:
def createAndSave(data){
firm.year = data.year as BigDecimal
firm.price = data.price as Float
firm.employees = data.employees as Integer
firm.name = data.name
if(!firm.validate()){
throw new ValidationException(null, firm.errors)
}
firm.save(flush:true)
firm
}
但是如果我发送带有无效数据的 JSON:{year:"asd", price: "fgh", employees: "3", name: "zxc"}
我得到一个 NumberFormatException。我知道,我可以在控制器中捕获 NumberFormatException(或我自己的某种异常),但是我怎样才能得到它被抛出的 fields/properties(并且仍然将其作为异常抛出)?
您不能使用当前用于初始化域对象的方法。当 grails 尝试将 String
值 asd
转换为 BigDecimal
(data.year as BigDecimal
) 并且它与 ValidationException
.[=21 无关时,将抛出 NFE =]
JSONObject
class 实现了 Map
并且在 grails 中,所有域都有一个接受 Map
的构造函数,并且可以使用映射属性初始化对象。因此,无需手动绑定每个 属性,您可以使用 firmService
中的 new Firm(data)
直接实例化对象。通过这种方式,当 grails 尝试将非十进制值绑定到 BigDecimal
类型字段时,您将获得绑定异常。
我在服务中抛出异常(尤其是这些验证异常)并在控制器中尝试捕获它们。我正在向
获取数据在公司控制器中:
try{
def data = request.JSON
firmService.createAndSave(data)
}
catch(ValidationException exception){
}
在公司服务中:
def createAndSave(data){
firm.year = data.year as BigDecimal
firm.price = data.price as Float
firm.employees = data.employees as Integer
firm.name = data.name
if(!firm.validate()){
throw new ValidationException(null, firm.errors)
}
firm.save(flush:true)
firm
}
但是如果我发送带有无效数据的 JSON:{year:"asd", price: "fgh", employees: "3", name: "zxc"}
我得到一个 NumberFormatException。我知道,我可以在控制器中捕获 NumberFormatException(或我自己的某种异常),但是我怎样才能得到它被抛出的 fields/properties(并且仍然将其作为异常抛出)?
您不能使用当前用于初始化域对象的方法。当 grails 尝试将 String
值 asd
转换为 BigDecimal
(data.year as BigDecimal
) 并且它与 ValidationException
.[=21 无关时,将抛出 NFE =]
JSONObject
class 实现了 Map
并且在 grails 中,所有域都有一个接受 Map
的构造函数,并且可以使用映射属性初始化对象。因此,无需手动绑定每个 属性,您可以使用 firmService
中的 new Firm(data)
直接实例化对象。通过这种方式,当 grails 尝试将非十进制值绑定到 BigDecimal
类型字段时,您将获得绑定异常。