Java >> Java tutorial >  >> Tag >> java.io

java.io.IOException:Forsøgt at læse fra lukket strøm

Hvad betyder EntityUtils.toString(postResponse.getEntity()) gøre med svarenheden? Jeg vil formoder, at det forbruger enhedens indholdsstrøm. HttpClient javadoc angiver, at kun enheder, som kan gentages, kan forbruges mere end én gang. Hvis entiteten ikke kan gentages, kan du derfor ikke føre indholdsstrømmen til mapperen igen. For at undgå dette bør du kun lade kortlæggeren forbruge streamen - hvis logning af indhold er påkrævet, skal du logge det parsede svarobjekt.


Jeg havde samme problem. Sørg for, at du ikke bruger enhedens indholdsstrøm i sektionen "se" eller "inspicer" på din IDE. Det er lukket efter det er forbrugt (læs).

Og undskyld for mit engelske.


Jeg fandt et svar på lignende problem med Spring RestTemplate her:https://www.baeldung.com/spring-rest-template-interceptor

hvis vi ønsker, at vores interceptor skal fungere som en anmodnings-/svarlogger, skal vi læse den to gange – første gang af interceptoren og anden gang af klienten. Standardimplementeringen tillader os kun at læse svarstrømmen én gang. For at imødekomme sådanne specifikke scenarier tilbyder Spring en særlig klasse kaldet BufferingClientHttpRequestFactory. Som navnet antyder, vil denne klasse buffer anmodningen/svaret i JVM-hukommelsen til flere gange.

Sådan initialiseres RestTemplate-objektet ved hjælp af BufferingClientHttpRequestFactory for at aktivere anmodnings-/svarstrømcachen:

RestTemplate restTemplate = new RestTemplate( new BufferingClientHttpRequestFactory( new SimpleClientHttpRequestFactory() ) );

Java tag