您的位置:首页 > 其它

一个关于在vertx中使用jersey框架接收text/xml类型的问题

2016-12-14 10:57 423 查看
使用vertx+jersey4.5.2做客户端api接口工程,在做微信回调的时候,其返回的数据Content-Type为text/xml,使用Consumes(MediaType.TEXT_XML)获取不到body中的数据,如下。

    @Path("wxPayNotify")

    @POST 

    @Consumes(MediaType.TEXT_XML)

    @Produces(MediaType.TEXT_XML)

    public String wxPayNotify(@Context HttpServerRequest request,String xml){...}

我做过其他的测试:使用@Consumes(MediaType.APPLICATION_XML)或者@Consumes(MediaType.TEXT_PLAIN),然后客户端用这两种类型是能获取到的,唯独MediaType.TEXT_XML获取不到,但是微信回调使用的是MediaType.TEXT_XML。如何才能获取到MediaType.TEXT_XML类型的数据?

通过debug调试,发现在DefaultJerseyHandler中的shouldReadData方法中,没有允许处理MediaType.TEXT_XML,添加上之后即可。

之前的代码为:

// Allow text/plain
if (MediaType.TEXT_PLAIN_TYPE.getType().equals(mediaType.getType())
&& MediaType.TEXT_PLAIN_TYPE.getSubtype().equals(mediaType.getSubtype())) {
return true;
}


修改后的代码为:

// Allow text/plain,text/xml,text/json
if (MediaType.TEXT_PLAIN_TYPE.getType().equals(mediaType.getType())) {
return true;
}
这样就允许text/plain,text/xml,text/json等以text开头的Content-Type。

note:修改某些开源的jar包中源文件之后,既可以用编译后的class文件替换掉原来的文件,又可以将源文件拷贝至我们的源文件中,修改后要保持报名和类名一样,这样在加载的时候就会先加载我们的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: