Intellij Idea 使用rest-assured lib和lombok的jackson-databind中出现UnrecognizedPropertyException

xfyts7mz  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(147)

我在执行测试脚本时得到UnrecognizedPropertyException。我正在使用intellij-idea,org.projectlombok:lombok:1.18.26com.fasterxml.jackson.core:jackson-databind:2.14.2io.rest-assured:rest-assured:5.3.0库与java 17。
在pojo类中,如果我将类字段设置为公共字段,那么它就可以工作。但是如果我将访问说明符更改为private,则会出现以下错误。
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "page" (class com.SampleGradle.pojo.responsePojo.User), not marked as ignorable (5 known properties: "per_page", "data", "total", "support", "total_pages"])
但是,相同的代码在Eclipse中使用相同的配置。
用户类

@Data
public class User {

    private int page;
    private int per_page;
    private int total;
    private int total_pages;
    private List<Datum> data;
    private Support support;

}

gradle构建文件

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter:5.7.1'
    testImplementation 'junit:junit:4.13.1'
    implementation 'io.rest-assured:rest-assured:5.3.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2'
    testImplementation 'org.assertj:assertj-core:3.24.2'
    compileOnly 'org.projectlombok:lombok:1.18.26'

}

请求文件

public Response getUsersList(String endPoint)
    {
        return RestAssured.given()
                .contentType("application/json")
                .get(endPoint)
                .andReturn();
    }
u4dcyp6a

u4dcyp6a1#

UnrecognizedPropertyException在您尝试将JSON响应反序列化为Java对象时发生,但JSON包含相应Java类中不存在的属性。
在您的示例中,该异常可能是由包含User类中不存在的其他属性的JSON响应引起的。要解决此问题,可以在User类上使用@JsonIgnoreProperties(ignoreUnknown = true)注解。这个注解告诉Jackson忽略JSON中任何无法识别的属性。
下面是带有@JsonIgnoreProperties注解的User类的更新版本:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int page;
    private int per_page;
    private int total;
    private int total_pages;
    private List<Datum> data;
    private Support support;
}

通过添加@JsonIgnoreProperties(ignoreUnknown = true),Jackson将在反序列化期间忽略任何未知属性,并防止抛出UnrecognizedPropertyException。
确保在代码中导入com.fasterxml.Jackson.annotation.JsonIgnoreProperties。
此外,确保您尝试反序列化的JSON响应与User类中定义的结构匹配。如果想要捕获JSON中的其他属性,可以将它们作为字段添加到User类中。
我希望这能为你解决这个问题。如果您还有其他问题,请告诉我!

相关问题