我最近实施了Jersey JAX-RS Rest服务.我创建了一个JIBX提供程序,允许用户在XML和Java类型之间解组和编组.我还想通过在URL路径中指定版本来对我的服务进行版本控制.版本控制将包括用于编组和解组Java类型的消息绑定版本.
因此,必须将版本传递给自定义JIBX提供程序,因此必须传递包含该版本的URL路径.但是,Provider接口(MessageBodyWriter和MessageBodyReader)不在其接口方法中提供URI路径.
以下是MessageBodyWriter接口的writeTo()方法的方法签名:
writeTo(Object, Type, Annotation[], MediaType, MultivaluedMap, OutputStream)
此方法参数不包含路径uri,因此,自定义jibx提供程序无法知道应该使用哪个消息绑定版本来编组Java类型.有没有解决的办法?
解决方法:
如果你想要比HttpServletRequest更多的JAX-RS,你可以注入一个javax.ws.rs.core.UriInfo.
public class MyProvider implements MessageBodyWriter {
@javax.ws.rs.core.Context
javax.ws.rs.core.UriInfo uriInfo;
}
我假设你使用@javax.ws.rs.PathParam来捕获path参数.然后,您可以使用UriInfo.getPathParameters().您还可以回退到UriInfo.getPathSegments()以获取您正在寻找的信息.这样可以省去自己解析请求URI的麻烦.任何JAX-RS实现都应该能够做到这一点.