Java 如何删除Jackson中重复的@JsonProperty
我与Jackson有一个非常简单的JSON类: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” 当我删除第二个时,
公共类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
能让代码更干净?