2012-09-13 28 views
2

当我尝试在控制器方法中捕获异常时,我无法捕获到SocketException。控制器的动作看起来像:Grails控制器 - 无法捕获SocketException

def updateDeviceStartV1() { 
     try { 
     ... 
     response.status = 200; 
     response.setContentType("application/octet-stream") 
     response.outputStream << responseService.encryptedResponse // byte[] 
     } 
     catch(Exception e) { 
     log.error "Server faced unexpected exception", e 
     response.status = 500; 
     ... 
     } 

的SocketException是以线“response.outputStream < < responseService.encryptedResponse”抛出,因为客户端意外关闭连接。尽管如此,这个例外是没有捕捉到和控制台收到标准例外显示...

我做错了什么?

回答

4

我认为如果引发异常的方法不会显式抛出异常(带有签名中的抛出),它将作为UndeclaredThrowableException抛出异常。然后,您的catch中的类型与它不匹配。尝试捕获SocketException。或者如果你可以使用catch(all)来捕捉它们。 哦,看看this

+0

但是,您的回答给了我更深入的Groovy异常魔法的理解:-)谢谢 – kuceram

+0

我很高兴=)。但是'catch(all)'绝对应该捕捉到来自更深层的任何异常。如果在catch块中打印异常的类会发生什么? –

+0

这是工作,我看上去很糟糕。对不起:-) – kuceram