Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS和JAX-B未基于泛型类型正确绑定JSON字段_Java_Json_Rest_Jersey_Jax Rs - Fatal编程技术网

Java JAX-RS和JAX-B未基于泛型类型正确绑定JSON字段

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类是字符串

我正在从发送JSON负载的Javascript客户端调用基于REST的JAX-RS web服务,Jersey无法转换我的类层次结构中使用的适当类型,我有:

@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