我有DTO如下:
public class MyDTO {
private String MEValueName;
private String MyId;
// getters and setters
}
Gson gson = new Gson();
List<MyDTO> list = new ArrayList<MyDTO>();
MyDTO dto = new MyDTO();
dto.setMEValueName("raghu");
dto.setMyId("qwer");
MyDTO dto1 = new MyDTO();
dto1.setMEValueName("raghuveer");
dto1.setMyId("qwer1");
list.add(dto);
list.add(dto1);
String json = gson.toJson(list);
System.out.println(json);
// below line is failing
List<Map<String, String>> list1 = gson.fromJson(json, new TypeToken<List<Map<String, String>>>(){}.getType());
System.out.println(list1);
当我运行时,我得到以下错误:
java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 11 path $[0].
此外,我想使用泛型类型,以便我也可以使用其他DTO转换为地图列表。请建议。
答案 0 :(得分:0)
我看到两个眼前的问题...... json-string是List&lt; MyDTO&gt;类型的对象。 gson.fromJson必须具有相同对象类型的TypeToken。 即使fromJson工作,你也无法分配List&lt; MyDTO&gt;到List&lt; Map&lt; String,String&gt;&gt;。
类型的列表编辑(通过内存执行此操作,因此可能需要进行一些微调以进行编译):
<build>
<plugins>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.4</version>
<configuration>
</configuration>
<executions>
<execution>
<id>default-descriptor</id>
<goals>
<goal>descriptor</goal>
</goals>
<phase>process-classes</phase>
</execution>
<execution>
<id>help-descriptor</id>
<goals>
<goal>helpmojo</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>