我想我需要创建一个专家ObjectMapper
,但无法找到任何示例代码来启动该过程。
JSON的创建者使用.Net
和public
属性,因此使用具有大写首字母的字段名称。我正在将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
?
答案 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);