Java 如何删除Jackson中重复的@JsonProperty

Java 如何删除Jackson中重复的@JsonProperty,java,json,jackson,Java,Json,Jackson,我与Jackson有一个非常简单的JSON类: 公共类Hoge{ @JsonProperty(“id”) 公开期末考试; 公共Hoge(@JsonProperty(“id”)aid){ cid=援助; } } 我注意到我必须将@JsonProperty(“id”)放在两个位置,以相互转换JSON字符串JSON对象, 第一个位置是字段声明,第二个位置是构造函数的参数 当我删除第一个@JsonProperty时,JSON键变成“cid”,而不是“id”。但我希望密钥名为“id” 当我删除第二个时,

我与Jackson有一个非常简单的JSON类:

公共类Hoge{
@JsonProperty(“id”)
公开期末考试;
公共Hoge(@JsonProperty(“id”)aid){
cid=援助;
}
}
我注意到我必须将@JsonProperty(“id”)放在两个位置,以相互转换JSON字符串JSON对象, 第一个位置是字段声明,第二个位置是构造函数的参数

当我删除第一个@JsonProperty时,JSON键变成“cid”,而不是“id”。但我希望密钥名为“id”

当我删除第二个时,我有一个例外:

没有为类型[简单类型,类系列]找到合适的构造函数:无法从JSON对象实例化(需要添加/启用类型信息?)

我想保持字段的名称(代码中的“cid”)和JSON键(代码中的“id”)不同


当我删除构造函数时,我有一个编译错误,因为id必须是“final”才能保持它不变


有人知道如何删除示例中重复的@JsonProperty吗?

如果您确实想在字段中保留
final
修饰符,并从构造函数中删除
@JsonProperty
注释,您可以使用
@JsonCreator
注释构造函数,并将参数从
aid
重命名为
id
,如下所示:

@数据
公务舱{
@JsonProperty(“id”)
公开期末考试;
@JsonCreator
公共Hoge(内部id){
this.cid=id;
}
}
然后使用以下方法之一:

ParanamerModule
ObjectMappper
中注册:

ObjectMapper mapper=new ObjectMapper();
registerModule(新的ParanamerModule());
类路径上需要以下依赖项:


com.fasterxml.jackson.module
详情请参阅

参数名称模块
注册模块,并确保使用
-参数
选项编译代码:

ObjectMapper mapper=new ObjectMapper();
registerModule(新参数namesmodule(JsonCreator.Mode.PROPERTIES));
需要以下依赖项:


com.fasterxml.jackson.module

详细信息。

如果您确实希望在字段中保留
final
修饰符,并从构造函数中删除
@JsonProperty
注释,则可以使用
@JsonCreator
注释构造函数,并将参数从
aid
重命名为
id
,如下所示:

@数据
公务舱{
@JsonProperty(“id”)
公开期末考试;
@JsonCreator
公共Hoge(内部id){
this.cid=id;
}
}
然后使用以下方法之一:

ParanamerModule
ObjectMappper
中注册:

ObjectMapper mapper=new ObjectMapper();
registerModule(新的ParanamerModule());
类路径上需要以下依赖项:


com.fasterxml.jackson.module
详情请参阅

参数名称模块
注册模块,并确保使用
-参数
选项编译代码:

ObjectMapper mapper=new ObjectMapper();
registerModule(新参数namesmodule(JsonCreator.Mode.PROPERTIES));
需要以下依赖项:


com.fasterxml.jackson.module

详细信息。

如果要映射名称(代码中为cid,json中为id),则需要两个注释。您真的需要构造函数来拥有参数吗?如果没有,就删除它。当我删除构造函数时,我有一个编译错误,因为id是“final”…然后删除final修饰符。还是你需要它?两次注释有什么问题?我想保留最后的注释。我只想让代码尽可能干净。为什么你认为
final
可以让代码更干净?如果你想映射名称(代码中的cid,json中的id),你需要两个注释。您真的需要构造函数来拥有参数吗?如果没有,就删除它。当我删除构造函数时,我有一个编译错误,因为id是“final”…然后删除final修饰符。还是你需要它?两次注释有什么问题?我想保留最后的注释。我只想让代码尽可能干净。你为什么认为
final
能让代码更干净?