无法找到错误的位置

问题描述:

我的服务器日志满了以下错误消息 无法找到在哪里可以找到此问题,我有基于Spring的MVC控制器。我检查了哪里,但无法找到。 (Tomcat的8,AWS的Linux)无法找到错误的位置

org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "null" 
     at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:77) 
     at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47) 
     at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:603) 
     at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:104) 
     at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) 
     at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) 
     at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129) 
     at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
     at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
     at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) 
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NumberFormatException: For input string: "null" 
     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
     at java.lang.Integer.parseInt(Integer.java:580) 
     at java.lang.Integer.valueOf(Integer.java:766) 
     at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:193) 
     at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113) 
     at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:450) 
     at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:423) 
     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195) 
     at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:107) 
     at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64) 
     ... 43 more 
+0

您试图将字符串转换成整数,但字符串为空。并且您试图将空值转换为整数,因此获取NumberFormatException –

+0

检查来自前端的控制器中输入的参数是否正确。来自前端的值在该控制器上为null,并且由于在控制器上定义的参数类型是整数,Spring会尝试将整数空值转换。这就是为什么你得到这个异常 –

+0

有很多的API,有没有我启用的东西,它告诉哪个控制器失败? –

在这里,我给由您记录错误和异常最好的程度,你轻松地调试错误的方式,这帮助。

1.登录请求URL(控制器URL)和请求参数 - 日志与其参数请求URL之前将其分配给controller.Means登录之前它转到控制器处理程序方法。 (这个乐于助人的你case.Because春天抛出异常之前,由处理器处理时尝试请求参数对应控制器处理方法参数转换)。通过这个,你知道什么是参数是recive对于哪个控制器URL

2 。记录请求URL和响应参数再次将请求url与其响应参数一起记录。这有助于确定为此URL发送的响应

3.用请求URL记录异常 - 如果您正在生成自定义异常(如CustomException)。然后在采用url的CustomException类中创建一个字段,因此当您记录它时,您可以轻松地确定创建该异常的URL。对于其他异常和错误,尝试制作通用异常处理程序类,并在该类中调用此方法,该方法在catch方法中调用,捕获Throwable并在该方法中记录打印堆栈跟踪

下面是示例代码: -

public CustomException extends Exception{ 
    String requestUrl; 
    String message; 
    } 

共同处理方法

 public static handleException(Throwable throwable, url){ 
     //Log print stack trace 


     } 

对于可以使用的ExceptionHandler春天,你可以很容易地找到关于谷歌搜索通过

春天的第一和第二点可以使用HandlerInterceptorAdapter,请了解这一点。

下面显示的示例代码

public class LogInteceptor extends HandlerInterceptorAdapter{ 

private static final Logger logger = LoggerFactory 
    .getLogger(LogInteceptor.class); 


//This method called before controller method handle the request 
@Override 
public boolean preHandle(HttpServletRequest request, 
    HttpServletResponse response, Object handler) throws Exception { 


//Log other things also 

//Logging the request url 
logger.info("Request URL {} request param is {}" + request.getRequestURL().toString(), request); 
//if returned false, we need to make sure 'response' is sent 
return true; 
} 

//This called before the model view send to view page for render 
@Override 
public void postHandle(HttpServletRequest request, 
     HttpServletResponse response, Object handler, 
     ModelAndView modelAndView) throws Exception { 
    //we can add attributes in the modelAndView and use that in the view page 
} 

//This called when response is going to sent 
@Override 
public void afterCompletion(HttpServletRequest request, 
    HttpServletResponse response, Object handler, Exception ex) 
     throws Exception { 

} 

}