随着时间的推移,有了400个关于restTemplate的错误请求

时间:2015-04-13 13:40:35

标签: java spring resttemplate

随着时间的推移,对restTemplate提出了400个不良请求 这意味着当在tomcat上部署war它工作正常时,但几个小时后restTemplate会抛出异常。

因此,当我们再次启动tomcat服务器时,它会开始工作几个小时。

applicationContext.xml中的restTemplate配置是

<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
        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());
        }

这里我通过restTemplate调用mongo restService。

例外是

  

org.springframework.web.client.HttpClientErrorException:400 Bad   请求   org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:90)   在   org.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)   at sun.reflect.GeneratedMethodAccessor472.invoke(Unknown Source)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)   在java.lang.reflect.Method.invoke(Method.java:606)at   org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)   在   org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)   在com.sun.proxy。$ Proxy80.fetchQueueByRange(未知来源)at   com.genex.hms.patqueue.controller.QueueController.fetchAppointmentQueue(QueueController.java:282)   在sun.reflect.GeneratedMethodAccessor471.invoke(未知来源)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)   在java.lang.reflect.Method.invoke(Method.java:606)at   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)   在   org.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)at   javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at   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(WsFilter.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)

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,resttemplate对于初始请求数量工作正常。经过一段时间(发送了多个请求)后,发生了400次。原因是我使用的是上下文管理的restTemplate,就像你用xml管理的那样,但在每次请求之前我都在添加一个     restTemplate.getMessageConverters().add( new MappingJackson2HttpMessageConverter());

这会导致Accept标头的内容不断增长。也许你每次都在restTemplate中添加一些行为。

答案 1 :(得分:0)

因为它适用于初始调用,所以在代码中看起来不像是一个问题。

是否可以将调试添加到queueMap中的记录元素(名称和值)。并记下它给你错误的记录。

使用chrome rest插件等实用程序手动触发此记录,并查看输出。

可能是mongo restService问题(可能)不接受发布的数据并抛出你的spring应用程序捕获的错误。

这只是一个确定的测试用例。