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

字段上的@JSONProperty注释以及getter/setter

汪泓
2023-03-14

我继承了在getter/setter上有@JSONProperty注释的特定位代码。这样做的目的是,当使用Jackson库序列化对象时,字段具有特定的名称。

当前代码:

private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}
@JsonProperty("FILENAME")
private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

我已经编译并运行了代码,但我不确定这是否会导致任何问题。对此有什么想法吗?

共有1个答案

巫马承德
2023-03-14

我根据几个测试得出的结论是,与属性名称不同的名称都将生效:

为。请考虑对您的案例做一个轻微的修改:

@JsonProperty("fileName")
private String fileName;

@JsonProperty("fileName")
public String getFileName()
{
    return fileName;
}

@JsonProperty("fileName1")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

filename字段和getfilename方法都具有正确的属性名filenamesetfilename具有不同的属性名filename1,在这种情况下,Jackson将在反序列化时在json中查找一个filename1属性,并在序列化时创建一个名为filename1的属性。

现在,在您的情况下,所有三个@JSONProperty都与filename的默认propertyname不同,它将选择其中一个作为属性(filename),如果这三个属性中的任何一个不相同,它将抛出一个异常

java.lang.IllegalStateException: Conflicting property name definitions
 类似资料:
  • 问题内容: 我继承了在getter / setter上具有@JsonProperty批注的某些位代码。目的是当使用Jackson库序列化对象时,字段具有该特定名称。 当前代码: 现在,对于另一个工具,我还需要使用JsonProperty对该字段进行注释。因此,这将是我更改的代码: 是否有人在字段和获取器/设置器上都使用了相同的注释?我在网上四处张望,却什么也没看见。 我已经编译并运行了代码,但是我

  • 问题内容: 我继承了在getter / setter上具有@JsonProperty批注的某些位代码。目的是当使用Jackson库序列化对象时,字段具有该特定名称。 当前代码: 现在,对于另一个工具,我还需要使用JsonProperty对该字段进行注释。因此,这将是我更改的代码: 是否有人在字段和获取器/设置器上都使用了相同的注释?我在网上四处张望,却什么也没看见。 我已经编译并运行了代码,但是我

  • 我想完成但不明白它是如何工作的 使用这段代码,我想注释生成它们各自的setter和getter,这样我就可以使用像 编辑2013-10-25 我的目标是构建一个能够做到这一点的库,因为我太好奇了,想了解如何在内部工作,所以我将能够用这个特性来支持我的框架,因为jet只是一个小实用程序,但在未来我希望它能为我节省大量的工作,你可以在github WSD Android上看到

  • 假设有一个具有布尔属性的类,其名称以: 它被序列化为,删除部分。 正如本问题中提到的,为了防止这种情况,我们需要使用注释显式地指定属性名。 解决办法是对属性getter应用注释。它对数据类不起作用,对我来说,这段代码看起来有点太多了,不能保持属性名的原样: 这样的行为背后的原因是什么?只是个虫子吗?是否有更简单的方法来防止删除Kotlin的前缀?

  • 我正在使用Lombok注释,但我希望一些字段是可选的,并默认为,以避免NPE。有没有一个简单的方法可以做到这一点?我什么也找不到。 或者,一种自定义的方法,用于在变量为时返回默认值。

  • 是否可能在已注释的字段内接收注释值?假设我有这个界面: 我有这样的实施: 我想了解的是:是否可以在MyClass中接收MyAnnoation的值?我想在MyClass类中实现一个方法,它将返回一个分配注释的值。所以,将返回“Annoation”。如果不可能,请通知我。