報錯原信息:
SG-UAP :ERROR RestExceptionResolver:141 - java.lang.StringIndexOutOfBounds
Exception: String index out of range: -6
at java.lang.String.substring(String.java:1937)
at java.lang.String.substring(String.java:1904)
at com.sgcc.uap.rest.annotation.processors.QueryRequestParamArgumentResolver.resolveArgument(QueryRequestParamArgumentResolver.java:72)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at com.sgcc.uap.kernel.spring.ModuleWebDispatcher.doDispatch(ModuleWebDispatcher.java:211)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:790)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at com.sgcc.uap.kernel.web.adaptor.ModuleServletAdaptor.service(ModuleServletAdaptor.java:119)
問題分析:
- 首先這個是UAP的Spring的REST異常, 通常是 REST輸入的數據格式不正確]。
- 再根據Exception: String index out of range: -6 索引值越界,判斷是有數據輸入越界, 很有可能是空的間隔符造成的。
- 之后查找報錯使用的REST路徑和JS 方法,發現Json有錯誤和異常的可能性。
1 function _dropDown_changed(){ 2 var restClient = new mx.rpc.RESTClient(); 3 var data ={"":""}; 4 var url = config_index.mappath("~/rest/config/getTable"); 5 var ret = ""; 6 restClient.post(url, data, function(ret){ 7 _ConfigDropEdt.setItems(eval(ret)); 8 }); 9 }
修改之后,不在報錯,功能也能使用了。
1 function _dropDown_changed(){ 2 var restClient = new mx.rpc.RESTClient(); 3 var data = "";//取消原先的{"":""}; 4 var url = config_index.mappath("~/rest/config/getTable"); 5 var ret = ""; 6 restClient.post(url, data, function(ret){ 7 _ConfigDropEdt.setItems(eval(ret)); 8 }); 9 }
疑惑的地方:本地tomcat啟動服務沒有問題,部署到weblogic上出現錯誤。