REST API陷入onFailure()方法问题-Retrofit2

时间:2019-05-11 18:28:54

标签: android rest retrofit2

我创建了用@XMLRootElement注释的Account类,并用@Path(“ /”)注释了一个服务类,在其中,我在静态块中创建了两个Account对象,并将它们添加到Account类型的List中。在同一服务中,我做了一个方法:

@GET
@Path("/accounts")
@Produces(MediaType.APPLICATION_JSON)
public List<Account> getAccounts(){
    return accounts;
}

由于我在TomEE服务器上运行它,所以我的完整URL是:

http://localhost:8080/android/accounts

然后我用邮递员对其进行了测试,并获得了JSON对象以及成功的响应。

在android中,我使用完全相同的字段制作了相同的类(帐户)。之后,我创建了 RestService接口

public interface RestService {

    @GET("accounts")
    Call<List<Account>> getAccounts();
}

在我的主要活动中,我尝试通过采用以下方法,使用 retrofit2 库从服务器获取数据:

private void RetrofitAccounts(){

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.1.9:8080/android/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RestService restService = retrofit.create(RestService.class);

    Call<List<Account>> call = restService.getAccounts();
    call.enqueue(new Callback<List<Account>>() {
        @Override
        public void onResponse(Call<List<Account>> call, Response<List<Account>> response) {
            Data.accounts = response.body();
            //Data.accounts is my list of type Account
            Log.i("SUCCESS","ACCOUNTS");
        }

        @Override
        public void onFailure(Call<List<Account>> call, Throwable t) {
            Log.i("FAILURE","ACCOUNTS");
            t.printStackTrace();
        }
    });
}

当我启动应用程序时,似乎总是进入onFailure()方法。

PrintStackTrace说:“ java.lang.IllegalStateException:应为BEGIN_ARRAY,但在第1行第2列路径$处为BEGIN_OBJECT”

1 个答案:

答案 0 :(得分:1)

失败表明json响应以对象标记“ {”开始,但是您的模型类需要列表标记“ [”。

我的猜测是您的服务器仅返回1个帐户,而您的改造响应类型定义为帐户列表。