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

RestAssured调用REST API更新时遇Jackson未识别'id'字段错误

解决Jackson反序列化时未识别'id'字段的问题

错误原因

执行get("/posts/{id}")获取数据时,接口返回的JSON包含id字段,但你的BookingDetails类未定义该属性,Jackson默认会将未识别的字段视为错误,因此抛出UnrecognizedPropertyException。

解决方法

方法1:在POJO类中添加'id'属性

直接在BookingDetails类中添加id字段并配上@JsonProperty注解,让Jackson正确映射该字段:

package pojoClasses;

import com.fasterxml.jackson.annotation.JsonProperty;

public class BookingDetails {
    
    @JsonProperty
    private String title;
    
    @JsonProperty
    private String author;

    @JsonProperty
    private String createdat;
    
    @JsonProperty
    private Integer id; // 添加id字段

    // 修正getter方法(原方法带参数不符合JavaBean规范)
    public String getTitle() {
        return this.title;
    }
    
    public void setTitle(String title) {
        this.title = title;
    }
    
    public String getAuthor() {
        return this.author;
    }
    
    public void setAuthor(String author) {
        this.author = author;
    }

    public String getCreatedat() {
        return this.createdat;
    }

    public void setCreatedat(String createdat) {
        this.createdat = createdat;
    }

    // id的getter/setter
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}

注意:原代码中的getter方法(如gettitle(String title))不符合JavaBean规范,会导致Jackson序列化/反序列化异常,建议修正为无参getter。

方法2:用注解忽略未知字段

在BookingDetails类上添加@JsonIgnoreProperties(ignoreUnknown = true)注解,让Jackson自动忽略未定义的字段:

package pojoClasses;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true) // 添加该注解
public class BookingDetails {
    // 原有代码...
}

方法3:全局配置Jackson忽略未知字段

如果不想给每个POJO类加注解,可以在BaseTest中全局配置RestAssured的ObjectMapper,让所有反序列化操作忽略未知字段:

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.restassured.config.ObjectMapperConfig;
import io.restassured.config.RestAssuredConfig;

public class BaseTest {
    static {
        RestAssured.config = RestAssured.config().objectMapperConfig(new ObjectMapperConfig().jackson2ObjectMapperFactory(
            (type, s) -> {
                ObjectMapper mapper = new ObjectMapper();
                // 关闭未知字段报错
                mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                return mapper;
            }
        ));
    }
}

额外提示

代码中调用getResponse.as(BookingDetails.class)是将GET返回的JSON转成BookingDetails对象,而GET接口返回的JSON包含id,这就是报错的触发点。以上三种方法任选其一即可解决问题,推荐方法2或3,如果你不需要在POJO中处理id字段的话。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:01:22