springfox: @ApiModelProperty throwing NumberFormatException if example value is not set

Hi,

When we don’t set example value in @ApiModelProperty for Wrapper class, its try to set empty string (“”) as an example and during parsing its throw NumberFormatException, can’t we have something which set default value for those wrapper class like for Integer it set 0 in JSON example. We are facing this issue for IntegerProperty, DecimalProperty, BaseIntegerProperty. Below i attached Exception log,

NumberFormatException stack trace
NumberFormatException: For input string: ""
      	at java.lang.Integer.parseInt(String)
      	at io.swagger.models.properties.IntegerProperty.setExample(Object)
      	at io.swagger.models.properties.AbstractProperty.setExample(String)
      	at springfox.documentation.swagger2.mappers.ModelMapper.mapProperty(ModelProperty)
      	at springfox.documentation.swagger2.mappers.ModelMapper.mapProperties(SortedMap)
      	at springfox.documentation.swagger2.mappers.ModelMapper.mapProperties(Model)
      	at springfox.documentation.swagger2.mappers.ModelMapper.mapModels(Map)
      	at springfox.documentation.swagger2.mappers.ModelMapper.modelsFromApiListings(Multimap)
      	at springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl.mapDocumentation(Documentation)
      	at springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(String, HttpServletRequest)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
      	at java.lang.reflect.Method.invoke(Object, Object[])
      	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(Object[])
      	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(NativeWebRequest, ModelAndViewContainer, Object[])
      	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletWebRequest, ModelAndViewContainer, Object[])
      	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(HttpServletRequest, HttpServletResponse, HandlerMethod)
      	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(HttpServletRequest, HttpServletResponse, HandlerMethod)
      	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(HttpServletRequest, HttpServletResponse, Object)
      	at org.springframework.web.servlet.DispatcherServlet.doDispatch(HttpServletRequest, HttpServletResponse)
      	at org.springframework.web.servlet.DispatcherServlet.doService(HttpServletRequest, HttpServletResponse)
      	at org.springframework.web.servlet.FrameworkServlet.processRequest(HttpServletRequest, HttpServletResponse)
      	at org.springframework.web.servlet.FrameworkServlet.doGet(HttpServletRequest, HttpServletResponse)
      	at javax.servlet.http.HttpServlet.service(HttpServletRequest, HttpServletResponse)
      	at org.springframework.web.servlet.FrameworkServlet.service(HttpServletRequest, HttpServletResponse)
      	at javax.servlet.http.HttpServlet.service(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.apache.tomcat.websocket.server.WsFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at com.accelevents.security.AuthenticationTokenProcessingFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterInvocation)
      	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at com.accelevents.security.AuthenticationTokenProcessingFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.session.SessionManagementFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.security.web.FilterChainProxy.doFilterInternal(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.security.web.FilterChainProxy.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(Filter, ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter, HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
      	at org.apache.catalina.core.StandardWrapperValve.invoke(Request, Response)
      	at org.apache.catalina.core.StandardContextValve.invoke(Request, Response)
      	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Request, Response)
      	at org.apache.catalina.core.StandardHostValve.invoke(Request, Response)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(Request, Response)
      	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(Request, Response)
      	at org.apache.catalina.core.StandardEngineValve.invoke(Request, Response)
      	at org.apache.catalina.connector.CoyoteAdapter.service(Request, Response)
      	at org.apache.coyote.http11.AbstractHttp11Processor.process(SocketWrapper)
      	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(SocketWrapper, SocketStatus)
      	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun()
      	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run()
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run()
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run()
      	at java.lang.Thread.run()

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 31 (9 by maintainers)

Commits related to this issue

Most upvoted comments

Hi everybody,

I solved this issue removing old swagger version (1.5.20) and add new one.

In pom.xml

<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.9.2</version>
	<exclusions>
		<exclusion>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-annotations</artifactId>
		</exclusion>
		<exclusion>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-models</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.9.2</version>
</dependency>
<dependency>
	<groupId>io.swagger</groupId>
	<artifactId>swagger-annotations</artifactId>
	<version>1.5.21</version>
</dependency>
<dependency>
	<groupId>io.swagger</groupId>
	<artifactId>swagger-models</artifactId>
	<version>1.5.21</version>
</dependency>

@ajcRodrigues Thanks! It works like a charm 🍸

For Gradle’s users:

compile("io.springfox:springfox-swagger2:2.9.2") {
    exclude module: 'swagger-annotations'
    exclude module: 'swagger-models'
}
compile("io.swagger:swagger-annotations:1.5.21")
compile("io.swagger:swagger-models:1.5.21")

I’d prefer that the empty example is properly handled rather than attempting to cast it to a number. However, in lieu of that, just showing the warning without the stack trace would be nice. In the meantime, I’ve added the following to my application.properties file to hide the warning and stack trace: logging.level.io.swagger.models.parameters.AbstractSerializableParameter=ERROR