接手同事开发完的代码,帮忙联调功能。在调用内部接口的时候却返回报错了:
MessageBodyWriter not found for media type=text/plain, type=class java.util.ArrayList, genericType=java.util.List<java.lang.String>
但是该内部接口调用的外部接口返回却是正常的。遂判断问题肯定出在内部代码里了。一开始没注意到接口类注解上面,认为是外部接口返回来的数据在处理时,转实体对象有问题,但是调试几次都不成功。然后仔细看看报错信息,发现是在向框架返回数据时,类型不正确。随后加上@Produces(MediaType.APPLICATION_JSON)注解,成功解决问题。
随即了解了下Jersey框架中数据类型的知识:
在 Java 中,当使用 JAX-RS 架构来开发 RESTful Web 服务时,需要使用 MessageBodyWriter 将 Java 对象序列化为某种媒体类型(如 JSON、XML 或纯文本)。对于每种媒体类型和 Java 类型组合,都需要一个对应的 MessageBodyWriter。个人理解就是在调用接口时,接口返回的数据,调用方需要保持和接口返回的一致才可以。
而@Produces注解:指定http响应的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型。
常用类型:
application/xml
application/json
application/x-www-form-urlencoded
multipart/form-data
application/octet-stream
text/plain
text/xml
text/html