Old*_*eon 21 java json jackson
我想我需要创建一个专家ObjectMapper,但无法找到任何示例代码来启动该过程.
JSON的创建者使用.Net和public属性,因此使用具有大写首字母的字段名称.我正在将JSON解析为POJO,所以我想使用小写的首字母.
在他们结束时:
public class Facet
{
public string Name { get; set; }
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因此,我必须:
public class Facet {
public String Name;
public String Value;
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢:
public class Facet {
public String name;
public String value;
}
Run Code Online (Sandbox Code Playgroud)
我是对的,这可以用一个ObjectMapper吗?
pb2*_*b2q 26
您可以使用@JsonProperty注释非常简单地解决您的第一个问题:
// java-side class
public class Facet
{
@JsonProperty("Name")
public String name;
@JsonProperty("Value")
public String value;
}
Run Code Online (Sandbox Code Playgroud)
现在,ObjectMapper将匹配不同的字段名称.如果您不想在类中添加注释,可以创建一个Mix-in类来代替您的Facet:
public class FacetMixIn
{
@JsonProperty("Name")
public String name;
@JsonProperty("Value")
public String value;
}
objectMapper.getDeserializationConfig().addMixInAnnotations(Facet.class, FacetMixIn.class);
Run Code Online (Sandbox Code Playgroud)
这将实现相同的目的,而无需在您的Facet班级中添加额外的注释.
Pro*_*uce 15
ObjectMapper可以将Jackson 配置为使用内置或自定义PropertyNamingStrategy,而不是注释每个字段,以在Java属性/字段名称和JSON元素名称之间应用一致的转换.
例如:
myObjectMapper.setPropertyNamingStrategy(PascalCaseStrategy);
Run Code Online (Sandbox Code Playgroud)
这个问题可以这样解决Jackson 2.5.0:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
Run Code Online (Sandbox Code Playgroud)
来自javadoc:
com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES允许对传入的JSON进行更宽容的反序列化的功能.如果启用,将使用它们的小写等效项匹配bean属性,这意味着任何大小写组合(传入和匹配的名称由低位大小规范化)都应该有效.
请注意,存在额外的性能开销,因为在存在大写字母的情况下,在比较之前,传入的属性名称需要更低.对于已经小写的名称的开销应该可以忽略不计.
默认情况下禁用功能.
自:2.5
| 归档时间: |
|
| 查看次数: |
26391 次 |
| 最近记录: |