I am using Spring WebMVC to provide a REST API. I use methods like
@RequestMapping("/path({id}") void getById(@PathVariable("id") int id) {} .
When a client incorrectly places a string instead of an integer id in a request, I get a NumberFormatException, for example:
java.lang.NumberFormatException: For input string: "dojo" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Long.parseLong(Long.java:410) at java.lang.Long.valueOf(Long.java:525) at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:158) at org.springframework.core.convert.support.StringToNumberConverterFactory$StringToNumber.convert(StringToNumberConverterFactory.java:59) at org.springframework.core.convert.support.StringToNumberConverterFactory$StringToNumber.convert(StringToNumberConverterFactory.java:1) at org.springframework.core.convert.support.GenericConversionService$ConverterFactoryAdapter.convert(GenericConversionService.java:420) at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:37) at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:135) at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199) at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:104) at org.springframework.beans.SimpleTypeConverter.convertIfNecessary(SimpleTypeConverter.java:47) at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:526) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolvePathVariable(HandlerMethodInvoker.java:602) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:289) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:163) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
My question now is, how can I gracely catch him? I know that Spring provides @ExeptionHandler annotations, but I don't want to catch NFE at all. I want to be able to catch all exceptions for parsing in order to provide the client with an error message.
Any ideas?
Greetings
Jan
Jan
source share