我试图在Kumuluzee 3.9.0上的java应用程序运行程序中获取错误响应体。我不知道,为什么不能从HTTP状态4xx的响应中获得响应。我试图通过将实体转换为InputStream并在循环中读取字节来获取响应体,但没有返回任何字节。IDE调试器显示带有byteArrayInputStrem的实体。
谢谢你的帮助。
@Path("/rest")
public interface MyClient {
@GET
@Path("/{value}")
@Consumes(MediaType.APPLICATION_JSON)
MyResponse getValue(@PathParam("value") String value);@ApplicationScoped
public class MyRestClient {
private MyClient client;
@PostConstruct
public void init() throws Exception{
try {
URI uri = new URI("http://localhost:8080/myservice/");
client = RestClientBuilder.newBuilder()
.baseUri(uri)
.build(MyClient.class);
}catch(Exception e){
log.error("", e);
throw e;
}
}
public String getValue(String data) {
try {
MyResponse myResponse = client.getMyResponse(String data);
if (myResponse != null) {
return myResponse.getValue(); //this works perfectly
}
} catch(WebApplicationException e){
Response response = e.getResponse(); //in case of 4xx responses I cannot get response body
if(response.hasEntity()){ //always return false, but response body is there
log.error("response body: " + response.getEntity());
}
Object entity = response.getEntity(); //IDE debug shows entity with bytearray in, but not able to read bytes programatically
String body = new BufferedReader(new InputStreamReader((FilterInputStream) e.getResponse().getEntity()))
.lines().collect(Collectors.joining("\n")); //does not work, returns empty string
String body2 = response.readEntity(String.class) //even this does not work
log.error("Unable to response..", e);
}catch (Exception e) {
log.error("Unable to get response.", e);
}
return null;
}发布于 2022-02-02 14:05:42
这是我的工作:
private void logWebApplicationException(WebApplicationException e) {
final Response response = e.getResponse();
final int status = response.getStatus();
if (response.hasEntity()) {
final Object entity = response.getEntity();
if (entity instanceof ByteArrayInputStream) {
ByteArrayInputStream erroIs = (ByteArrayInputStream) entity;
String error = new String(erroIs.readAllBytes(), StandardCharsets.UTF_8);
log.error("Erro ao tentar obter arquivos RCO do SIMPI. Status: {}. Descricao: {} ",
status, error);
}
} else {
log.error("Erro ao tentar obter arquivos RCO do SIMPI. Status: {}. Descricao: {}",
status, response.getStatusInfo().getReasonPhrase());
}
}https://stackoverflow.com/questions/67749802
复制相似问题