Spring RestTemplate-获取java.io.EOFException:null和在执行简单的GET请求时解析HTTP请求标头时出错

时间:2019-11-17 21:32:33

标签: java spring spring-boot resttemplate

我想使用 RestTemplate 通过我自己的应用程序中的端点执行GET,但是当我这样做时,出现以下错误/异常:

o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
java.io.EOFException: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1229) ~[tomcat-embed-core-9.0.27.jar:9.0.27]

这是我的端点类:

@RequestMapping("/wakeup")
@RestController
public class WakeUpResource {

    private Logger logger = LoggerFactory.getLogger(ApplicationWakeUpScheduller.class);

    @GetMapping
    public @ResponseBody String wakeup() {        
        return "I am awake!";
    }
}

这是我的Application类,其中的端点称为:


@SpringBootApplication
public class NovaVidaBudgetApplication implements CommandLineRunner {

    public static void main(String[] args) {

        SpringApplication.run(NovaVidaBudgetApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        wakeUpApplication();
    }

    public void wakeUpApplication() {

        HttpHeaders headers = getHttpHeaders();

        final RestTemplate restTemplate = new RestTemplate();

        final String url = "http://localhost:8080/wakeup";

        HttpEntity<String> requestEntity = new HttpEntity<>(headers);
        restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);

    }

    private HttpHeaders getHttpHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.TEXT_PLAIN);
        return headers;
    }

}

当我立即执行此应用程序时,将调用终结点并得到 200 状态响应,但是这种令人讨厌的EOFException也会发生。这是包含异常的完整日志:

2019-11-17 18:47:34.294  INFO 27233 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 10 ms
2019-11-17 18:47:34.305 DEBUG 27233 --- [nio-8080-exec-1] org.apache.tomcat.util.http.Parameters   : Set encoding to UTF-8
2019-11-17 18:47:34.305 DEBUG 27233 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : GET "/api/v1/wakeup", parameters={}
2019-11-17 18:47:34.308 DEBUG 27233 --- [nio-8080-exec-1] pertySourcedRequestMappingHandlerMapping : looking up handler for path: /wakeup
2019-11-17 18:47:34.311 DEBUG 27233 --- [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.codeonblue.novavidabudget.resources.WakeUpResource#wakeup()
2019-11-17 18:47:34.322 DEBUG 27233 --- [nio-8080-exec-1] c.c.n.s.ApplicationWakeUpScheduller      : Waking up the application
2019-11-17 18:47:34.331 DEBUG 27233 --- [nio-8080-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Using 'text/plain', given [text/plain, application/json, application/*+json, */*] and supported [text/plain, */*, application/json, application/*+json]
2019-11-17 18:47:34.331 DEBUG 27233 --- [nio-8080-exec-1] m.m.a.RequestResponseBodyMethodProcessor : Writing ["I am awake!"]
2019-11-17 18:47:34.342 DEBUG 27233 --- [  restartedMain] s.n.www.protocol.http.HttpURLConnection  : sun.net.www.MessageHeader@8adddc44 pairs: {null: HTTP/1.1 200}{Content-Type: text/plain;charset=ISO-8859-1}{Content-Length: 11}{Date: Sun, 17 Nov 2019 20:47:34 GMT}
2019-11-17 18:47:34.343 DEBUG 27233 --- [  restartedMain] o.s.web.client.RestTemplate              : Response 200 OK
2019-11-17 18:47:34.343 DEBUG 27233 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 200 OK
2019-11-17 18:47:34.349 DEBUG 27233 --- [  restartedMain] o.s.web.client.RestTemplate              : Reading to [java.lang.String] as "text/plain;charset=ISO-8859-1"
2019-11-17 18:47:34.354 DEBUG 27233 --- [  restartedMain] c.c.n.s.ApplicationWakeUpScheduller      : End http call. 
2019-11-17 18:47:34.354 DEBUG 27233 --- [  restartedMain] o.s.boot.devtools.restart.Restarter      : Creating new Restarter for thread Thread[main,5,main]
2019-11-17 18:47:34.354 DEBUG 27233 --- [  restartedMain] o.s.boot.devtools.restart.Restarter      : Immediately restarting application
2019-11-17 18:47:34.354 DEBUG 27233 --- [  restartedMain] o.s.boot.devtools.restart.Restarter      : Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@4d595ac5
2019-11-17 18:47:34.354 DEBUG 27233 --- [  restartedMain] o.s.boot.devtools.restart.Restarter      : Starting application com.codeonblue.novavidabudget.NovaVidaBudgetApplication with URLs [file:/home/james/appz/1-current-projects/springboot/novavidabudget/target/classes/]
2019-11-17 18:47:34.358 DEBUG 27233 --- [nio-8080-exec-1] o.a.tomcat.util.net.SocketWrapperBase    : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4330282d:org.apache.tomcat.util.net.NioChannel@1d148f25:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:40364]], Read from buffer: [0]
2019-11-17 18:47:34.358 DEBUG 27233 --- [nio-8080-exec-1] org.apache.tomcat.util.net.NioEndpoint   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4330282d:org.apache.tomcat.util.net.NioChannel@1d148f25:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:40364]], Read direct from socket: [0]
2019-11-17 18:47:34.358 DEBUG 27233 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4330282d:org.apache.tomcat.util.net.NioChannel@1d148f25:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:40364]], Status in: [OPEN_READ], State out: [OPEN]
2019-11-17 18:47:39.356 DEBUG 27233 --- [nio-8080-exec-2] o.a.tomcat.util.net.SocketWrapperBase    : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4330282d:org.apache.tomcat.util.net.NioChannel@1d148f25:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:40364]], Read from buffer: [0]
2019-11-17 18:47:39.358 DEBUG 27233 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header

java.io.EOFException: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1229) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1137) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:735) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:353) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:292) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

2019-11-17 18:47:39.358 DEBUG 27233 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4330282d:org.apache.tomcat.util.net.NioChannel@1d148f25:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:40364]], Status in: [OPEN_READ], State out: [CLOSED]
2019-11-17 18:47:39.360 DEBUG 27233 --- [nio-8080-exec-2] org.apache.tomcat.util.net.NioEndpoint   : Calling [org.apache.tomcat.util.net.NioEndpoint@57fbed24].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@4330282d:org.apache.tomcat.util.net.NioChannel@1d148f25:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:40364]])

java.lang.Exception: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1163) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.SocketWrapperBase.close(SocketWrapperBase.java:402) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.NioEndpoint$Poller.cancelledKey(NioEndpoint.java:665) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1582) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

我认为下面的错误是一个提示,但是我不知道标头出了什么问题

o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header

有什么想法吗?

预先感谢

0 个答案:

没有答案