使用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
相关产品推荐
相关产品推荐

