java.lang.ClassCastException: myClass 无法转换为 class java.util.List
java.lang.ClassCastException: myClass cannot be cast to class java.util.List
我有一个名为 MyClass
的 class 设置,其中包含两个列表:
public class MyClass {
List<String> list1;
List<Descriptor> list2;
public List<String> getList1() { return list1; }
public List<Descriptor> getList2() { return list2; }
public void setList1(List<String> list1) { this.list1 = list1; }
public void setList2(List<Descriptor> list2) { this.list2 = list2; }
}
在另一个 class 中,我想基于 MyClass
创建一个 object
并将该对象提供给方法
MyClass class = new MyClass();
class.setList1(someList);
class.setList2(otherList);
return Response.status(HttpStatus.OK_200).entity(class).build();
方法 .entity
需要一个对象,但我抛出 java.lang.ClassCastException
错误并且无法弄清楚原因。
提供的所有内容都是一个列表,所以我不明白为什么会抛出此错误
你是说:MyClass(实体)由列表组成,因此它是一个列表。
这句话简直是疯了:我的房子是砖砌的,所以我的房子是砖。
这里的核心工作是将您传递给 entity()
方法的内容转换为字节包,因为 HTTP 协议发送字节。这是如何运作的?这就是您需要了解您的工具和库如何工作的地方:我假设您在这里使用 Jersey/JAX-RS。即设置如下:
- 您可以发送任何对象。
- 但是,该对象通过一堆已注册的 'translators' 假脱机,每个对象都有能力将对象类型的子集转换为字节流。开箱即用,系统知道如何 'translate' 字符串(这很简单 - 使用
.getBytes(someCharsetEncoding)
将字符串转换为字节)和其他一些事情。但如果需要,您可以添加更多翻译人员。这就是 entity()
方法采用任何对象的原因。
- 一些注册翻译人员认为它们是列表,而实际上它们不是,这导致了您的错误。 (因为你有一个
MyClass
的实例,它不是列表。当然,它的所有字段都是列表,但是,房子不是砖)。
但解决方案(可能)不在于修复 'translator'。首先想清楚:你实际上想做什么? HTTP只是发送字节,那么你要发送什么字节呢? MyClass
对象需要以一种或另一种方式转换为字节。那应该怎么走?什么服务在调用这个?它有什么作用?
这是一个示例答案:
某些网站有 javascript 调用此端点并通过 JSON 库将其接收到的任何内容转换为 javascript 对象,或者只是 eval()
ing 它。
如果这是您的答案,那么您希望 MyClass
实体变成 JSON。 Jackson 可以为您做到。
我有一个名为 MyClass
的 class 设置,其中包含两个列表:
public class MyClass {
List<String> list1;
List<Descriptor> list2;
public List<String> getList1() { return list1; }
public List<Descriptor> getList2() { return list2; }
public void setList1(List<String> list1) { this.list1 = list1; }
public void setList2(List<Descriptor> list2) { this.list2 = list2; }
}
在另一个 class 中,我想基于 MyClass
创建一个 object
并将该对象提供给方法
MyClass class = new MyClass();
class.setList1(someList);
class.setList2(otherList);
return Response.status(HttpStatus.OK_200).entity(class).build();
方法 .entity
需要一个对象,但我抛出 java.lang.ClassCastException
错误并且无法弄清楚原因。
提供的所有内容都是一个列表,所以我不明白为什么会抛出此错误
你是说:MyClass(实体)由列表组成,因此它是一个列表。
这句话简直是疯了:我的房子是砖砌的,所以我的房子是砖。
这里的核心工作是将您传递给 entity()
方法的内容转换为字节包,因为 HTTP 协议发送字节。这是如何运作的?这就是您需要了解您的工具和库如何工作的地方:我假设您在这里使用 Jersey/JAX-RS。即设置如下:
- 您可以发送任何对象。
- 但是,该对象通过一堆已注册的 'translators' 假脱机,每个对象都有能力将对象类型的子集转换为字节流。开箱即用,系统知道如何 'translate' 字符串(这很简单 - 使用
.getBytes(someCharsetEncoding)
将字符串转换为字节)和其他一些事情。但如果需要,您可以添加更多翻译人员。这就是entity()
方法采用任何对象的原因。 - 一些注册翻译人员认为它们是列表,而实际上它们不是,这导致了您的错误。 (因为你有一个
MyClass
的实例,它不是列表。当然,它的所有字段都是列表,但是,房子不是砖)。
但解决方案(可能)不在于修复 'translator'。首先想清楚:你实际上想做什么? HTTP只是发送字节,那么你要发送什么字节呢? MyClass
对象需要以一种或另一种方式转换为字节。那应该怎么走?什么服务在调用这个?它有什么作用?
这是一个示例答案:
某些网站有 javascript 调用此端点并通过 JSON 库将其接收到的任何内容转换为 javascript 对象,或者只是 eval()
ing 它。
如果这是您的答案,那么您希望 MyClass
实体变成 JSON。 Jackson 可以为您做到。