我目前正在使用Spring MVC 3.0.6。我的期望是在Spring级别抛出任何异常时(即在到达我的控制器的请求之前),不会将异常堆栈作为响应主体返回。当预期结果是HTML时,控件将转到包含自定义错误消息的错误页面。在这种情况下,结果符合我的预期。
但我遇到了问题,而预期的结果是JSON。在这种情况下,我将异常堆栈作为JSON格式。
e.g .-
请求的网址 - /MyApp/secure/employee/name.json?employee=815009& .........
让我们通过URL篡改一名员工= 815003333333333333333333333333333333333333333333333333333333333333333333333333333333339(意味着巨大的有效载荷)。
现在我得到的反应就像 -
{“exception”:{“value”:“8150 ......... ..9”, “errorCode”:“typeMismatch”,“requiredType”:“long”,“propertyName”:null,“propertyChangeEvent”:null,“message”:“无法将类型'java.lang.String'的值转换为必需的类型' long';嵌套异常是org.springframework.core.convert.ConversionFailedException:无法将值'“8150 ............ 9 \”从类型'java.lang.String'转换为'long'类型;嵌套异常是java。 lang.NumberFormatException:对于输入字符串:\“8150 ..................... ..9 \”“,”rootCause“:{”cause“:null,”message“:”对于输入字符串:\“8150 ...... ..................... 9 \“”,“localizedMessage”:“输入字符串:\”8150 ............。9 \“”,“stackTrace”:[{..................... .. }]}}
我的预期回应就像 -
{“value”:[“一些自定义错误消息”],“成功”:false}
注意:在我的控制器中,我希望员工在@RequestParam中尽可能长(数据类型)。
我担心的是,由于异常堆栈包含有关从中传播异常的库的详细信息,因此可能会使我的应用程序在安全方面受到攻击。
有没有办法返回自定义消息而不是异常堆栈?
答案 0 :(得分:0)
有很多方法可以处理有关要发送回调用者的异常的详细信息。
我相信@ControllerAdvise
在这里很有用。你可以删除堆栈跟踪,只返回一个用户友好的消息。 (在删除堆栈跟踪之前记录)
有关其用法的更多信息,请参见here