Jackson Json 反序列化:无法识别的字段“...”,未标记为可忽略

2022-09-02 05:23:39

我收到以下错误,我发现没有解决方案为我解决问题:

无法识别的字段“GaugeDeviceId”(类 GaugeDevice),未标记为可忽略

问题似乎在于,服务返回带有前导大写字母的属性名称,而类属性以小写字母开头。

我试过了:

  1. 将属性名称更改为第一个大写字母 - 相同的错误
  2. 添加到属性实例化 - 相同的错误@JsonProperty("SerialNo")
  3. 添加到相应的 getters - 相同的错误@JsonProperty("SerialNo")
  4. 添加到相应的 setter - 相同的错误@JsonProperty("SerialNo")
  5. 添加到所有这些(只是为了好玩) - 相同的错误@JsonProperty("SerialNo")

(注:只是一个例子)@JsonProperty("SerialNo")

奇怪的是,该注释:应该完全抑制该错误,但它仍然触发...@JsonIgnoreProperties(ignoreUnknown = true)

这里的类:(注意:不完整)

@JsonIgnoreProperties(ignoreUnknown = true)
public class GaugeDevice 
{
    private int gaugeDeviceId;
    private Date utcInstallation;
    private String manufacturer;
    private float valueOffset;
    private String serialNo;
    private String comment;
    private int digitCount;
    private int decimalPlaces;

    @JsonProperty("SerialNo")
    public String getSerialNo() {
        return serialNo;
    }

    public void setSerialNo(String serialNo) {
        this.serialNo = serialNo;
    }

    @JsonProperty("Comment")
    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }

出路在哪里?请帮忙。

编辑:

下面是客户端类:(只是一个简单的测试客户端)

import ccc.android.meterdata.*;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import org.glassfish.jersey.jackson.JacksonFeature;

public class RestClient
{
    private String connectionUrl;
    private javax.ws.rs.client.Client client;

    public RestClient(String baseUrl) {
         client = ClientBuilder.newClient();;
         connectionUrl = baseUrl;
         client.register(JacksonFeature.class); 
    }

    public GaugeDevice GetGaugeDevice(int id){

        String uri = connectionUrl + "/GetGaugeDevice/" + id;
        Invocation.Builder bldr = client.target(uri).request("application/json");
        return bldr.get(GaugeDevice.class);
    }
}

我希望错误在这里有其根源?


答案 1

我遇到了同样的问题,我通过将注释导入从以下位置更改来解决:

com.fasterxml.jackson.annotation.JsonIgnoreProperties

org.codehaus.jackson.annotate.JsonIgnoreProperties

不必定义任何命名策略或对象映射器。


答案 2

我遇到了同样的问题,并通过从

com.fasterxml.jackson.annotation.JsonProperty

org.codehaus.jackson.annotate.JsonProperty