Java JAX-RS和JAX-B未基于泛型类型正确绑定JSON字段
我正在从发送JSON负载的Javascript客户端调用基于REST的JAX-RS web服务,Jersey无法转换我的类层次结构中使用的适当类型,我有:Java JAX-RS和JAX-B未基于泛型类型正确绑定JSON字段,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我正在从发送JSON负载的Javascript客户端调用基于REST的JAX-RS web服务,Jersey无法转换我的类层次结构中使用的适当类型,我有: @XmlRootElement public class MyVO extends BaseVO<Integer> { // ... fields } 但是当它到达服务器端时,Jersey错误地将有效负载字段提取为字符串,而没有将其转换为整数,因为它应该基于它的实际ID类型。在运行期间,MyVO的ID字段的实际ID类是字符串
@XmlRootElement
public class MyVO extends BaseVO<Integer> {
// ... fields
}
但是当它到达服务器端时,Jersey错误地将有效负载字段提取为字符串,而没有将其转换为整数,因为它应该基于它的实际ID类型。在运行期间,MyVO的ID字段的实际ID类是字符串而不是整数,当我尝试手动强制转换它时,我得到:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
有没有可能让JAX-RS根据给定的层次结构自动发现正确类型的字段?可能不是问题所在,但您已经在
BaseVO
中将id
声明为私有,并希望注入id字段,该字段在MyVO
中不可访问。您是否尝试在BaseVO
中将其设置为受保护而不是私有?一些框架将值设置到字段中,并忽略setter。由于泛型在编译时被替换为具体类型,所以泛型在我看来不应该是问题所在。我尝试将其更改为protected,但得到了相同的错误
{"type":"myVO","id":4,"name":"myVO"}
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer