如果我有两个这样的实体提供商
MyBean1MessageBodyWriter: @Produces("application/xml") with generic type Object
MyBean2MessageBodyWriter: @Produces("application/xml") with generic type Object
在序列化MyBean
类时,首先使用哪些实体提供程序。 MyBean1MessageBodyWriter
或MyBean2MessageBodyWriter
@GET
@Produces("application/xml")
public MyBean getMyBean() {
return new MyBean("Hello World!", 42);
}
我指的是这里给出的例子https://jersey.java.net/documentation/latest/message-body-workers。
答案 0 :(得分:0)
来自JAX-RS 2.0。规范
获取将映射到消息实体主体的对象。对于
Response
或子类的返回类型,该对象是entity
属性的值,对于其他返回类型,它是返回的对象。确定回复的媒体类型
选择支持对象和媒体的
MessageBodyWriter
个提供程序集 消息实体主体的类型。使用泛型类型的主键对选定的
MessageBodyWriter
提供程序进行排序,其中泛型类型是对象类的最近超类的提供程序首先排序,而辅助键是媒体类型。遍历已排序的
MessageBodyWriter
提供程序,并使用每个提供程序的isWriteable
方法选择支持将映射到实体主体的对象的MessageBodyWriter
。< / p>如果步骤5找到合适的
MessageBodyWriter
,则使用其writeTo
方法将对象映射到实体主体。- 醇>
否则,服务器运行时必须生成一个生成
InternalServerErrorException
,WebApplicationException
的子类,其状态设置为500,并且没有实体,客户端运行时必须生成{{1 }}
所以看起来您的问题属于第5类。应该实施ProcessingException
方法来消除两个作者的歧义。它仍然在这一点之后,它无法确定,我不确定接下来会发生什么。如果可以的话, 应该尝试区分歧义。
另外,我不确定,通过查看作者的名字,如果他们两个都要写isWritable
类型。如果是这样的话,那似乎是一个问题。如果没有,那么您只需检查MyBean
isWritable
参数是否等于Class
MyBean.class