使用ObjectMapper更改字段大小写

时间:2012-09-14 15:05:55

标签: java json jackson

我想我需要创建一个专家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

完成此操作

4 个答案:

答案 0 :(得分:25)

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

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

    @JsonProperty("Value")
    public String value;
}

现在ObjectMapper将匹配不同用途的字段名称。如果您不想在课程中添加注释,可以为Facet创建一个混合课程代替

public class FacetMixIn
{
    @JsonProperty("Name")
    public String name;

    @JsonProperty("Value")
    public String value;
}

objectMapper.getDeserializationConfig().addMixInAnnotations(Facet.class, FacetMixIn.class);

这将实现相同的目标,而无需在Facet类中添加其他注释。

答案 1 :(得分:14)

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

例如:

myObjectMapper.setPropertyNamingStrategy(PascalCaseStrategy);

答案 2 :(得分:6)

这个问题可以通过这样的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

     

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

     

请注意,自传入以来会有额外的性能开销   对于案例,在比较之前,属性名称需要更低   哪里有大写字母。名称的开销   然而,已经小写应该可以忽略不计。

     

默认情况下禁用功能。

     

自:   2.5

答案 3 :(得分:0)

快速更新,因为我正在寻找相同的答案和代码片段objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);