当前位置: 首页 > 知识库问答 >
问题:

通用域名格式。fasterxml。杰克逊。数据绑定。exc.UnrecognedPropertyException-杰克逊图书馆

洪越泽
2023-03-14

当我尝试反序列化汽车类时,我得到了下面的错误。杰克逊正试图在父类中的子元素中搜索字段。我如何确保杰克逊使用适当的子类型进行反序列化?我相信我需要使用混合/客户转换器。但我不确定如何在这个特定场景中使用它们。

注意:在我的例子中,除TestMain之外的所有类都在一个jar文件中,我不能修改源文件。

错误

线程"main"中的异常com.fasterxml.jackson.databind.exc.UngnizedProperty tyException:无法识别的字段"color"(类com.salesportal.proxy.Car),未标记为可忽略(一个已知属性:"name"])

汽车JAVA

public class Automobile {

    private Car[] cars;

    public Car[] getCars() {
        return cars;
    }

    public void setCars(Car[] cars) {
        this.cars = cars;
    }



}

Car.java

public class Car {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

Corolla.java

public class Corolla extends Car {

    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }



}

TestMain。JAVA

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestJSON {

    public static void main(String[] args) throws IOException{

        ObjectMapper mapper = new ObjectMapper();

        Automobile automobile = new Automobile();
        Corolla corolla = new Corolla();
        corolla.setName("Toyota");
        corolla.setColor("Silver Grey");
        automobile.setCars(new Corolla[]{corolla});

        System.out.println(mapper.writeValueAsString(automobile));

        Automobile auto = mapper.readValue(mapper.writeValueAsString(automobile), Automobile.class);
    }

}

JSON字符串

{"cars":[{"name":"Toyota","color":"Silver Grey"}]}

共有2个答案

宇文鸿振
2023-03-14

Automobile类没有颜色属性。

改变这一点:

Automobile auto = mapper.readValue(mapper.writeValueAsString(automobile), Automobile.class);

对此:

Corolla auto = mapper.readValue(mapper.writeValueAsString(automobile.getCars()), Corolla .class);
范承望
2023-03-14

Vicky,你可以在JACKSON中使用子类型注释。下面的内容对我来说很有用,只是做了些改变

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;

@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({ @JsonSubTypes.Type(value = Corolla.class, name = "color") })
public class Car {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
 类似资料:
  • 我遇到了反序列化问题: 这是我的班级: 我要反序列化的JSON是: 我得到以下例外: 我不想补充: 因为我想得到ResObj... 如果我添加注释,它会通过,但会将其设置为null。。这是我不想要的。

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 我尝试使用一些类似于以下内容的JSON(来自AlphaVantage): 并使用Jackson解析它( 我的股票类如下所示: 相反,我得到了以下错误: 为什么Jackson在连接到我的股票类时遇到问题?如何将JSON中的符号连接到Stock类中的符号? 编辑:如果我将符号更改为小写,我会收到相同的错误消息:

  • 问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要

  • 我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A

  • 首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。 我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。 首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进: 无论如何。。。 我正在尝试以下操作: 但是,在运行时,我收到以下错误: 我不