问题描述
||
@XmlRootElement(name = \"request\")
@XmlAccessorType(XmlAccessType.FIELD)
@JSONConfigurable
public class InteractionRequest {
@XmlElement(name = \"skill\")
protected String skillName;
}
@XmlRootElement(name = \"request\")
@XmlAccessorType(XmlAccessType.FIELD)
@JSONConfigurable
public class InteractionChatRequest extends InteractionRequest {
@XmlElement
@XmlJavaTypeAdapter(LPStringsXmlAdapter.class)
@XmlElementWrapper(name = \"preChatLines\")
protected List<String> line;
}
和2种用法:
@PUT
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response postExitSurvey(EntityHolder<InteractionRequest> ent) {
InteractionRequest request = ent.getEntity();
return null;
}
@POST
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response interactionRequest(EntityHolder<InteractionChatRequest> ent) {
InteractionChatRequest params = ent.getEntity();
return null;
}
现在,在两种情况下,实体所有者都持有InterationRequest对象,该对象在第二种用法中导致ClassCastException。
知道为什么吗? Jersey是否不应该将实体转换为我声明的类型?
在这种情况下,甚至可以进行等级划分吗?
谢谢,
乌迪
解决方法
您对JAXB注释有问题:
InteractionRequest
和InteractionChatRequest
都用@XmlRootElement(name = \"request\")
注释。因此它们具有相同的根元素,这使得JAXB无法区分它们。
尝试将InteractionChatRequest
更改为@XmlRootElement(name = \"chat-request\")
。