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

使用Rest Assured反序列化时遇'Name expected'错误求助

Rest Assured反序列化时遇到'Name expected'错误的解决办法

问题描述

我是Rest Assured新手,在尝试反序列化接口响应时遇到了'Name expected'错误,不清楚该错误所指的名称是什么。

测试代码

import io.restassured.RestAssured.given
import io.restassured.builder.RequestSpecBuilder
import io.restassured.http.ContentType
import io.restassured.specification.RequestSpecification
import org.junit.Test
import pojos.UserData

class RestTest {
    private var requestSpec: RequestSpecification = RequestSpecBuilder()
        .setBaseUri("https://reqres.in")
        .setContentType(ContentType.JSON)
        .setBasePath("/api/users/")
        .addQueryParam("page", 2)
        .build()

    @Test
    fun getUsers() {
            var response =
                given().spec(requestSpec)
                    .`when`().get()
                    .then().extract().body().`as`(UserData.class)
    }
}

POJO类

package pojos;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
class UserData {
    var id: Int = 0;
    var email: String? = null;
    var first_name: String? = null;
    var last_name: String? = null;
    var avatar: String? = null;
}

错误截图

错误截图

解决步骤

1. 修正Kotlin语法错误

测试代码里的UserData.class是Java语法,Kotlin中获取Class对象的正确写法是UserData::class.java——这是触发'Name expected'错误的直接原因,Kotlin编译器无法识别.class这种写法,期望的是合法的名称表达式。

2. 匹配接口响应的POJO结构

https://reqres.in/api/users?page=2返回的是包含分页信息和用户数组的JSON结构,而非单个用户对象。你的UserData类仅对应数组中的单个用户,需要创建外层响应类来匹配完整结构:

package pojos;
import lombok.Data;
import java.util.List;

@Data
public class UserResponse {
    private int page;
    private int per_page;
    private int total;
    private int total_pages;
    private List<UserData> data;
}

之后测试代码中反序列化要改为:

.then().extract().body().`as`(UserResponse::class.java)

3. 优化POJO的字段映射(可选)

如果用Kotlin开发,建议用Kotlin的data class替代Lombok注解,配合@SerializedName处理下划线命名的字段(需引入Gson或Jackson依赖),更符合Kotlin开发习惯:

package pojos

import com.google.gson.annotations.SerializedName

data class UserData(
    val id: Int,
    val email: String?,
    @SerializedName("first_name") val firstName: String?,
    @SerializedName("last_name") val lastName: String?,
    val avatar: String?
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:00:38