You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android客户端GET请求JSON转POJO的@RequestBody等效方案问询

Android客户端GET请求JSON响应自动转POJO方案

背景

在Spring Boot Web中,我们可以通过@RequestBody注解轻松实现POST请求的JSON自动转换为POJO,示例代码如下:

/**
 * Defines a route to POST a new transaction
 * @param transaction the Transaction to POST
 * @return ResponseEntity<Boolean> Http.Status CREATED or INTERNAL_SERVER_ERROR
 */
@PostMapping("transactions")
public ResponseEntity<Boolean> postTransaction(@RequestBody Transaction transaction){
    try {
        return new ResponseEntity<>(service.postTransaction(transaction), HttpStatus.CREATED);
    } catch (RuntimeException e) {
        return new ResponseEntity<>(false, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

这里的Transaction是自定义POJO类,@RequestBody会自动把请求体的JSON字符串转为Transaction对象,操作非常便捷。

现在需要解决的问题是:Android客户端发送GET请求并接收JSON格式响应时,有没有类似的自动将JSON转换为POJO的方案?客户端已经定义了相同的POJO类,不想手动用Jackson或GSON来解析。

解决方案

Android生态里有几个主流的网络库都支持这种自动序列化/反序列化能力,无需手动编写JSON解析逻辑:

1. Retrofit + Gson Converter

Retrofit是Android常用的网络请求库,通过添加Converter插件就能实现JSON与POJO的自动转换:

  • 添加项目依赖(以Gson为例):
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}
  • 定义Retrofit接口,直接声明返回值为目标POJO类:
public interface TransactionApi {
    @GET("transactions/{id}")
    Call<Transaction> getTransaction(@Path("id") String transactionId);
}
  • 初始化Retrofit并发起请求:
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://your-api-domain.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

TransactionApi api = retrofit.create(TransactionApi.class);
Call<Transaction> call = api.getTransaction("123");
call.enqueue(new Callback<Transaction>() {
    @Override
    public void onResponse(Call<Transaction> call, Response<Transaction> response) {
        if (response.isSuccessful()) {
            // 直接拿到转换好的Transaction对象
            Transaction transaction = response.body();
        }
    }

    @Override
    public void onFailure(Call<Transaction> call, Throwable t) {
        // 处理请求失败逻辑
    }
});

GsonConverterFactory会自动完成JSON到POJO的转换,完全无需手动调用Gson解析。

2. OkHttp + Moshi

如果偏好轻量型JSON库,Moshi搭配OkHttp也能实现自动转换:

  • 添加依赖:
dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.10.0'
    implementation 'com.squareup.moshi:moshi:1.14.0'
    implementation 'com.squareup.moshi:moshi-kotlin:1.14.0'
}
  • 定义Moshi适配器并发起请求:
OkHttpClient client = new OkHttpClient();
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<Transaction> adapter = moshi.adapter(Transaction.class);

Request request = new Request.Builder()
        .url("https://your-api-domain.com/transactions/123")
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        // 处理请求失败
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String json = response.body().string();
            // 自动转换为Transaction对象
            Transaction transaction = adapter.fromJson(json);
        }
    }
});

Moshi适配器已经封装了所有解析逻辑,无需手动处理字段映射。

3. Retrofit + Kotlin协程(Kotlin项目)

如果是Kotlin项目,结合协程能让代码更简洁:

  • 添加依赖:
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
    implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
}
  • 定义挂起函数接口:
interface TransactionApi {
    @GET("transactions/{id}")
    suspend fun getTransaction(@Path("id") transactionId: String): Transaction
}
  • 发起请求:
val retrofit = Retrofit.Builder()
        .baseUrl("https://your-api-domain.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(CoroutineCallAdapterFactory())
        .build()

val api = retrofit.create(TransactionApi::class.java)

lifecycleScope.launch {
    try {
        val transaction = api.getTransaction("123")
        // 直接使用转换后的POJO对象
    } catch (e: Exception) {
        // 处理异常逻辑
    }
}

这些方案都能实现和Spring Boot中@RequestBody类似的自动转换效果,只需定义好POJO类和网络接口即可完成JSON到POJO的转换。

内容的提问来源于stack exchange,提问作者Adam Winter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:32:28