ObjectMapper的默认行为

时间:2018-07-31 13:33:29

标签: java json objectmapper

我有一个类对象,正在使用杰克逊ObjectMapper将其转换为json。 转换后,它将为每个变量进行两次输入。这种行为正常吗?如果是,那么有人可以向我解释一下吗?

我目前的理解是对象映射器采用@JsonProperty注释来创建fieldNames

@Data
@Entity
@Table(name = "oracle_blob")
public class OracleBlob {

@Id
@GenericGenerator(name = "native", strategy = "native")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@Column(name ="id")
@JsonIgnore
private Long id;

@Column(name ="source_entity")
@JsonProperty("Source_Entity")
private String Source_Entity;

@Column(name ="interface_name")
@JsonProperty("Interface_Name")
private String Interface_Name;

@Column(name ="batch_id")
@JsonProperty("Batch_Id")
private String Batch_Id;

@Column(name ="message")
@JsonProperty("Message_Content")
private String Message_Content;

}

输出

  

{“ source_Entity”:“测试source2”,“ interface_Name”:“测试接口Name2”,“ batch_Id”:“ testbatchId2”,“ message_Content”:“测试message2”,“ Source_Entity”:“测试source2”,“ Interface_Name“:”测试接口Name2“,” Batch_Id“:” testbatchId2“,” Message_Content“:”测试message2“}}

1 个答案:

答案 0 :(得分:2)

请勿使用大写字母作为字段名称,因为Jackson会解析getter(在您的示例中由lombok生成),并根据interface_namegetInterface_Name()的一个字段来搜索@JsonProperty("Interface_Name"),等

  

Jackson 2.5确实添加了MapperFeature.USE_STD_BEAN_NAMING,启用该功能即可处理您想要的内容。出于向后兼容的原因,默认情况下禁用此功能。   另一种选择(如果使用的是较早版本,则是唯一的选择)是也用@JsonProperty注释getter;如果是这样,field和getter将被正确地耦合。

在此处查看完整答案:https://github.com/FasterXML/jackson-databind/issues/729#issuecomment-84761480