如何从另一个包中向 Java class 添加无参数构造函数?

How to add No Argument Constructor to Java class from another package?

我正在尝试读取一个 json 文件并转换为对象,这对其他 类 工作正常,但在这种情况下,我的模型有 GeoJsonMultiPolygon 来自 package org.springframework.data.mongodb.core.geo; 不包含无参数的构造函数

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.mongodb.core.geo.GeoJsonMultiPolygon` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)


at [Source: (BufferedInputStream); line: 12, column: 5] (through reference chain: java.util.ArrayList[0]->data.countryboundaries.CountryBoundaries["geometry"])

型号:

@Getter
@Setter
@ToString()
@EqualsAndHashCode
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
@Document(collection = "country-boundaries")
public class CountryBoundaries {
    @Id
    private String id;
    @EqualsAndHashCode.Exclude
    private String type;
    @EqualsAndHashCode.Exclude
    private CountryBoundariesProperties properties;
    @EqualsAndHashCode.Exclude
    private GeoJsonMultiPolygon geometry;
}

代码:

ObjectMapper mapper = new ObjectMapper();
        InputStream is = Country.class.getResourceAsStream("/country-boundaries.json");
        List<CountryBoundaries> countryBoundaries = mapper.readValue(is,  new TypeReference<>(){});
        countryBoundariesRepository.saveAll(countryBoundaries);

由于我无法修改库中的代码并使用 ObjectMapper 填充几何对象,我该如何绕过此错误?

检查 GeoJsonModule 的静态方法。它包含包含 geo json 类.

的序列化器和反序列化器的模块

注册您的 ObjectMapper 实例。

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(GeoJsonModule.geoJsonModule());

geoJsonModule() 包含序列化器和反序列化器,如果您只需要反序列化器,请使用 deserializers().