我的应用程序必须使用一个 Web 服务,该服务以 json 格式生成特定类型的数组。这是方法:
public Unidade[] getUnidades(){
Session s = ConnectDb.getSession();
try {
List<Unidade> lista = new ArrayList<Unidade>(s.createQuery("from Unidade order by unidSigla").list());
Unidade[] unidades = lista.toArray(new Unidade[0]);
return unidades;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
s.close();
}
}
然后,在我的客户中,它是这样消耗的:
WebResource webResource = client.resource("http://localhost:8080/RestauranteWeb/rest/unidades/");
ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
String output = response.getEntity(String.class);
System.out.println(output);
Unidade[] unidades = new Gson().fromJson(output, Unidade[].class);
System.out.println(unidades);
正确检索了 json 字符串,但在将其转换为数组时出现以下错误:
{"unidade":[{"unidCodigo":"17","unidSigla":"BOSTA"},{"unidCodigo":"18","unidSigla":"BOSTE"},{"unidCodigo":"13","unidSigla":"bumerangui"},{"unidCodigo":"15","unidSigla":"HHH"},{"unidCodigo":"16","unidSigla":"HHH2"},{"unidCodigo":"6","unidSigla":"papapa"},{"unidCodigo":"9","unidSigla":"pobrena"},{"unidCodigo":"7","unidSigla":"sei la"},{"unidCodigo":"3","unidSigla":"TAÇINHA"},{"unidCodigo":"5","unidSigla":"tanque"},{"unidCodigo":"1","unidSigla":"UNIDADE"},{"unidCodigo":"14","unidSigla":"zerao"}]}
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
at com.google.gson.Gson.fromJson(Gson.java:815)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at br.mviccari.client.UnidadeClient.main(UnidadeClient.java:40)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)
at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70)
at com.google.gson.Gson.fromJson(Gson.java:803)
... 4 more
我究竟做错了什么?