Java 实体提供者选择
如果我有两个这样的实体提供者Java 实体提供者选择,java,web-services,jersey,jax-rs,jersey-2.0,Java,Web Services,Jersey,Jax Rs,Jersey 2.0,如果我有两个这样的实体提供者 MyBean1MessageBodyWriter: @Produces("application/xml") with generic type Object MyBean2MessageBodyWriter: @Produces("application/xml") with generic type Object 序列化MyBean类时首先使用哪个实体提供程序。MyBean1MessageBodyWriter或MyBeanMessageBodyWriter 我
MyBean1MessageBodyWriter: @Produces("application/xml") with generic type Object
MyBean2MessageBodyWriter: @Produces("application/xml") with generic type Object
序列化MyBean类时首先使用哪个实体提供程序。MyBean1MessageBodyWriter或MyBeanMessageBodyWriter
我指的是这里给出的例子 来自JAX-RS2.0。规格 获取将映射到消息实体正文的对象。对于响应或子类的返回类型,对象是实体属性的值,对于其他返回类型,它是返回的对象 确定响应的媒体类型 选择支持对象和媒体的MessageBodyWriter提供程序集 消息实体正文的类型 使用泛型类型的主键对所选MessageBodyWriter提供程序进行排序,其中泛型类型为对象类的最近超类的提供程序将首先排序,而媒体类型的辅助键将排序 遍历已排序的MessageBodyWriter提供程序,并利用每个提供程序的isWriteable方法,选择支持将映射到实体体的对象的MessageBodyWriter 如果步骤5找到了合适的MessageBodyWriter,则使用其writeTo方法将对象映射到实体主体 否则,服务器运行时必须生成generate InternalServerErrorException,这是WebApplicationException的一个子类,其状态设置为500,并且没有实体和客户端运行时必须生成ProcessingException 看来你的担忧属于第五位。应该实现iswriteable方法来消除两个编写器之间的歧义。在这一点之后,它仍然无法确定,我不确定接下来会发生什么。如果可以的话,你应该试着把歧义分开 此外,通过查看作者的姓名,我也不确定他们是否都要编写MyBean类型。如果是这样的话,这似乎是个问题。如果不是,那么只要在类参数等于MyBean.Class时签入iswriteable即可
@GET
@Produces("application/xml")
public MyBean getMyBean() {
return new MyBean("Hello World!", 42);
}
public boolean isWriteable(Class<?> type, Type genericType,
Annotation annotations[], MediaType mediaType) {
return type == MyBean.class;
}