我正在尝试在 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;
}