关于用 apache cxf中对于不是返回200错误的处理 ,获取错误描述文本的方法
现象:我们在使用apache cxf框架的时候遇到了一些问题,一般来说,如果我们用rest client 如果处理的返回是正确的,那么我们可以很轻易的处理,但是如果我们如果返回的请求返回码不是200,这种情况我们在调试时候发现exception对象中并不包含任何error message的文本:比如类似这个截图的请求(我们用restclient)测试的,这个返回码是400,返回的响应中有error description字段,我们想要获取这个字段的内容,但是我们尝试了很多次,不能直接从exception对象中获取,也就是说没有一个类似的字段或者API 方法可以直接拿到。
我们的尝试(debug)截图如下:从这里可以非常岷县的看出来,这里没有任何一个字段可以直接拿到和我们的description那段文本相应的内容,所以我们的尝试失败了。
新的突破:我们一位优秀的工程师想出了一个好办法,其实这个内容并不是没有,而是不直接,其实这段内容已经返回了,它的内容是以字节流的形式放在了response.entity字段中,我们可以从上文的截图中看到,这个response.entity对应的内容是一个HttpURLConnection$HttpInputStream的一个内部类的实例,所以我们必须打开这个字节流然后从中去构造我们所需要的内容。
解决方案如下:在我们的catch()异常处理分支中:
catch(WebApplicationException e){
LOGGER.error("webapplicationexception: "+e.getResponse().getStatus()); //这一行是获取status code
InputStream in = (InputStream) e.getResponse().getEntity();//这个输入流中包含了所有的文本信息是关于error message的
byte[] buffer;
try{
buffer= new byte;
in length;
//打开输入流并且读取,最终将其中的内容拼成字符串
while((length = in.read(buffer,0,buffer.length)) != -1){
output= new String(buffer,"UTF-8");
}
}catch(IOException ex){
LOGGER.error(ex.getMessage());
}
}
...
恐龙说:“遇到色狼,不慌不忙;遇到禽兽,慢慢享受……” 长大了娶唐僧做老公,能玩就玩一玩,不能玩就把他吃掉。 我是个凑数的。。。 我抢、我抢、我抢沙发~ 不知该说些什么。。。。。。就是谢谢 脱了衣服我是禽兽,穿上衣服我是衣冠禽兽!
页:
[1]