2015-04-13 4 views
-1

С течением времени получил 400 плохих запросов на restTemplate Это означает, что при развертывании войны с tomcat он работает нормально, но через несколько часов restTemplate выбрасывает исключение.С течением времени получил 400 плохих запросов на restTemplate

Итак, когда мы снова запустим сервер tomcat, он начнет работать нормально в течение нескольких часов.

Моя конфигурация restTemplate в applicationContext.xml является

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
       <property name="supportedMediaTypes" value="application/json"> 
       </property> 
      </bean> 
     </list> 
    </property> 
</bean> 

и на моей службе autowired как

@Autowired 
     private RestTemplate restTemplate; 

    and service code like 

     HttpEntity<Queue> queueMap = new HttpEntity<Queue>(queueItem); 
     try { 
     queueList = restTemplate.postForObject(HMS_QUEUE_URL + "/fetchqueuebyrange", queueMap, QueueList.class); 
     } catch (Exception e) { 
      StringWriter sw = new StringWriter(); 
      PrintWriter pw = new PrintWriter(sw); 
      e.printStackTrace(pw); 
      log.debug("PatQueueService-fetchApptQueueItemByApptDate :: " + pw.toString()); 
     } 

Здесь я называю Монго restService через restTemplate.

Исключение составляет

org.springframework.web.client.HttpClientErrorException: 400 Bad Запрос на org.springframework.web.client.DefaultResponseErrorHandler.handleError (DefaultResponseErrorHandler.java:90) в орг .springframework.web.client.RestTemplate.handleResponseError (RestTemplate.java:494) на org.springframework.web.client.RestTemplate.doExecute (RestTemplate.java:451) на org.springframework.web.client.RestTemplate .Execute (RestTemplate.java:409) на org.springframework.web.client.RestTemplate.postForObject (RestTemplate.java:287) на com.genex.hms.patqueue.service.PatQueueServiceImpl.fetchQueueByRange (PatQueueServiceImpl.java:954) в sun.reflect .GeneratedMethodAccessor472.invoke (Unknown Source) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:606) в org.springframework.aop. support.AopUtils.invokeJoinpointUsingReflection (AopUtils.java:319) на org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:196) на com.sun.proxy. $ Proxy80.fetchQueueByRange (Unknown Source) вcom.genex.hms.patqueue.controller.QueueController.fetchAppointmentQueue (QueueController.java:282) в sun.reflect.GeneratedMethodAccessor471.invoke (Unknown Source) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.invoke (Method.java:606) при org.springframework.web.method.support.InvocableHandlerMethod.invoke (InvocableHandlerMethod.java:213) в org.springframework.web.method .support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:126) на org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:96) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:617) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java: 578) на org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:80) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:923) на орг.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:852) на org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:882) на org.springframework.web.servlet.FrameworkServlet. doPost (FrameworkServlet.java:789) в javax.servlet.http.HttpServlet.service (HttpServlet.java:646) в javax.servlet.http.HttpServlet.service (HttpServlet.java:727) в org.apache. catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:303) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.tomcat.websocket.server.WsFilter. doFilter (WsFilt er.java:52) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:220) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:122) на org.apache.catalina.authenticator .AuthenticatorBase.invoke (AuthenticatorBase.java:501) по адресу org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:170) по адресу org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98) на org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:950) на org.apache.catalina.core .StandardEngineValve.invoke (StandardEngineValve.java:116) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java : 1040) на org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:607) в org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:315) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) в java.lang.Thread.run (Thread.java:745)

ответ

0

Не выглядит проблемой в коде, поскольку он работает для первоначальных вызовов.

Можете ли вы добавить отладку для записи элементов (имя и значения), размещенных в queueMap. и обратите внимание на запись, для которой она дает вам ошибку.

Пожар этой записи вручную с помощью утилиты, такой как chrome rest plugin и т. Д., И посмотрите результат.

Возможно, это проблема с монго-restService (возможно), не принимающая данные, отправленные и выдающие ошибку, которую захватывает ваше приложение весны.

Это всего лишь тестовый пример для идентификации.

1

У меня была аналогичная проблема, resttemplate работал нормально для начального количества запросов. Через некоторое время (количество отправленных запросов) произошло 400.Причина заключалась в том, что я использовал контекстно-ориентированный restTemplate, как вам удалось с помощью xml, но перед каждым запросом я добавлял restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

Это привело к увеличению содержания заголовка Accept. Возможно, вы каждый раз добавляете какое-то поведение в свой restTemplate.