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

Rest-Assured电商API自动化登录遇UnrecognizedPropertyException求助

问题分析:Rest-Assured反序列化登录响应失败

场景描述

我正在为电商项目搭建基于Rest-Assured的端到端API自动化流程,采用POJO类与序列化/反序列化机制实现。手动在Postman中调用BaseUri为https://rahulshettyacademy.com、路径为/api/ecom/auth/login的登录接口可正常运行,但自动化执行时出现异常。

主API类代码

import io.restassured.builder.RequestSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.specification.RequestSpecification;
import pojo.EcommerceLoginRequest;
import pojo.EcommerceLoginResponse;

import static io.restassured.RestAssured.given;

public class ECommerceAPITest {

    public static void main(String[] args) {
     RequestSpecification req = new RequestSpecBuilder().setBaseUri("https://rahulshettyacademy.com").setContentType(ContentType.JSON).build();
     
     EcommerceLoginRequest loginRequest = new EcommerceLoginRequest();
     loginRequest.setUserEmail("imtiyaz_@hotmail.co.uk");
     loginRequest.setUserPassword("786Immy110.1");

     RequestSpecification reqLogin = given().log().all().spec(req).body(loginRequest); 
     EcommerceLoginResponse loginResponse = reqLogin.when().post("/api/ecom/auth/login").then().log().all().extract().response().as(EcommerceLoginResponse.class); 

     System.out.println(loginResponse.getToken());
     System.out.println(loginResponse.getuserid());
    }
}

对应的EcommerceLoginResponse POJO类代码

package pojo;

public class EcommerceLoginResponse {
    
    String token;
    String userid;
    String message;
    
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
    public String getuserid() {
        return userid;
    }
    public void setuserid(String userid) {
        this.userid = userid;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

运行错误日志

Exception in thread "main" java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "userId" (class pojo.EcommerceLoginResponse), not marked as ignorable (3 known properties: "token", "userid", "message"])
 at [Source: (String)"{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NGVhMmQ1MDc1M2VmYTQ2NTdmMDBiNDMiLCJ1c2VyRW1haWwiOiJpbXRpeWF6X0Bob3RtYWlsLmNvLnVrIiwidXNlck1vYmlsZSI6MTIzNDU2Nzg5MSwidXNlclJvbGUiOiJjdXN0b21lciIsImlhdCI6MTY5MzA3NjIwNywiZXhwIjoxNzI0NjMzODA3fQ.SZYf86-UPkQwy9UmZEsbt16cNDmYfnLcpRLgGa_aa1A","userId":"64ea2d50753efa4657f00b43","message":"Login Successfully"}"; line: 1, column: 306] (through reference chain: pojo.EcommerceLoginResponse["userId"])

问题根源与修复方案

问题根源

错误日志明确显示:接口返回的JSON字段是驼峰式的userId,但POJO类中定义的对应字段是全小写的userid,Jackson反序列化时无法匹配这两个字段,因此抛出未识别属性的异常。

修复方式

方式一:修改POJO字段名与接口返回一致

将POJO中的userid改为userId,同时更新对应的getter/setter方法名以符合JavaBean规范:

package pojo;

public class EcommerceLoginResponse {
    
    String token;
    String userId;
    String message;
    
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

同时修改主类中的打印代码:

System.out.println(loginResponse.getUserId());

方式二:使用Jackson注解指定字段映射

若不想修改POJO字段名,可在userid字段上添加@JsonProperty注解,明确指定其对应JSON中的userId字段:

package pojo;

import com.fasterxml.jackson.annotation.JsonProperty;

public class EcommerceLoginResponse {
    
    String token;
    @JsonProperty("userId")
    String userid;
    String message;
    
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
    public String getuserid() {
        return userid;
    }
    public void setuserid(String userid) {
        this.userid = userid;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:55:02