使用ObjectMapper更改字段大小写

我想我需要创建一个专业的ObjectMapper ,并且无法找到任何示例代码来启动该过程。

JSON的创建者使用.Netpublic属性,因此使用具有大写首字母的字段名称。 我正在将JSON解析为POJO,所以我想使用小写的首字母。

在他们结束时:

  public class Facet { public string Name { get; set; } public string Value { get; set; } } 

因此,我必须:

  public class Facet { public String Name; public String Value; } 

我更喜欢:

  public class Facet { public String name; public String value; } 

我是对的,这可以用ObjectMapper完成吗?

使用@JsonProperty注释可以非常简单地解决您的第一个问题:

 // java-side class public class Facet { @JsonProperty("Name") public String name; @JsonProperty("Value") public String value; } 

现在, ObjectMapper将匹配不同的字段名称。 如果您不想在类中添加注释,可以创建一个Mix-in类来代替您的Facet

 public class FacetMixIn { @JsonProperty("Name") public String name; @JsonProperty("Value") public String value; } objectMapper.getDeserializationConfig().addMixInAnnotations(Facet.class, FacetMixIn.class); 

这将实现相同的function,而不需要在Facet类中添加其他注释。

可以将Jackson ObjectMapper配置为使用内置或自定义PropertyNamingStrategy ,而不是注释每个字段,以在Java属性/字段名称和JSON元素名称之间应用一致的转换。

例如:

 myObjectMapper.setPropertyNamingStrategy(PascalCaseStrategy); 

这个问题可以从Jackson 2.5.0这样解决:

 ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); 

来自javadoc:

com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES

该function将允许对传入的JSON进行更宽容的反序列化。 如果启用,将使用它们的小写等效项匹配bean属性,这意味着任何大小写组合(传入和匹配的名称由低位大小规范化)都应该有效。

请注意,存在额外的性能开销,因为在存在大写字母的情况下,在比较之前需要对传入的属性名称进行较低的设置。 对于已经小写的名称的开销应该可以忽略不计。

默认情况下禁用function。

自:2.5