随着时间的推移,对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)
答案 0 :(得分:1)
我有一个类似的问题,resttemplate对于初始请求数量工作正常。经过一段时间(发送了多个请求)后,发生了400次。原因是我使用的是上下文管理的restTemplate,就像你用xml管理的那样,但在每次请求之前我都在添加一个
restTemplate.getMessageConverters().add( new MappingJackson2HttpMessageConverter());
这会导致Accept标头的内容不断增长。也许你每次都在restTemplate中添加一些行为。
答案 1 :(得分:0)
因为它适用于初始调用,所以在代码中看起来不像是一个问题。
是否可以将调试添加到queueMap中的记录元素(名称和值)。并记下它给你错误的记录。
使用chrome rest插件等实用程序手动触发此记录,并查看输出。
可能是mongo restService问题(可能)不接受发布的数据并抛出你的spring应用程序捕获的错误。
这只是一个确定的测试用例。