当前位置: 首页 > 面试题库 >

Jackson Json Deserialisation:无法识别的字段“…”,未标记为可忽略

薛欣德
2023-03-14
问题内容

我收到以下错误,但找不到解决方法对我有用:

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

问题似乎是,该服务返回的属性名称前带有一个大写字母,而类属性则以一个下一个字母开头。

我试过了:

  1. 将propertyNames更改为第一个大写字母-相同的错误
  2. 添加@JsonProperty("SerialNo")到属性实例化-同样的错误
  3. 添加@JsonProperty("SerialNo")到相应的吸气剂-同样的错误
  4. 添加@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);
    }
}

我希望错误的根源在这里?


问题答案:

要检查的另一件事是PropertyNamingStrategy,这将允许Jackson使用“
Pascal命名”并将JSON属性与POJO属性进行匹配。请在此处查看f.ex:http :
//www.javacodegeeks.com/2013/04/how-to-use-propertynamingstrategy-in-
jackson.html




 类似资料:
  • 我来这里是因为我还没有找到解决问题的办法。我实际上是在尝试用wiremock来存根一个响应(对模拟服务的调用是通过假装客户端完成的)。我的意图是在真实的假客户机上得到虚假的响应,不是在测试中,而是在真实的应用程序中。因此,在本例中,我不是在测试中截取WireMock服务器,而是在spring boot应用程序类中,然而,在截取响应时,我遇到了一个非常奇怪的错误,到目前为止,我已经调查了很多次,但都

  • 问题内容: 我遇到反序列化问题: 这是我的课: 我要反序列化的JSON是: 我得到这个异常: 我不想添加: 因为我想得到ResObj … 如果我添加了注释,它将通过,但会将其设置为null ..这是我不想要的。 问题答案: 如果您不想在bean中使用设置器,而只使用字段和获取器,则可以使用ObjectMapper的可见性检查器来允许字段可见。像下面这样

  • 问题内容: 我使用杰克逊将JSON转换为Object类。 JSON: 对象类别: 码: 我的代码抛出这样的异常: 而且我不想在Test类上添加一个道具,我只是想让jackson转换Test中也存在的存在值。 问题答案: Jackson提供了几种不同的机制来配置“额外” JSON元素的处理。以下是将to 配置为not 的示例。 有关其他方法,请参见http://wiki.fasterxml.com/

  • 我有一个具有此结构的 xsd 文件: 所以,我已经用jaxb2生成了java类: Accesso 类和其他类也是如此。这是我尝试反序列化的xml文件的一个例子: 但是当我要反序列化某个xml文件时,我得到了这个错误: com.fasterxml.jackson.databind.exc.未识别的字段Accesso(类com.xx.yy.FlsProSoc),未标记为不可忽略(一个已知的属性:内容]

  • 我有一个thymeleaf表单和Spring引导后端。我有一个model类,它的getters和setters名称有点不同。因此,当我要取那个模型并将它的字段作为表单输入字段时,Tymeleaf不能将它们识别为字段。 窗体适用于区域字段。但对Amt字段不起作用。如果我将isAmt()get方法更改为getIsAmt(),也许我可以修复这个问题。但是我不能更改模态类的任何方法名,因为这个类已经编译好

  • 问题内容: Optparse,旧版本只是忽略所有无法识别的参数并继续执行。在大多数情况下,这不是理想的,已在argparse中进行了更改。但是在某些情况下,您想忽略任何无法识别的参数并解析您指定的参数。 例如: 反正有覆盖吗? 问题答案: 更换 与 例如,