【问题标题】:Jackson not naming fields how I want [duplicate]杰克逊没有按我的意愿命名字段[重复]
【发布时间】:2012-07-30 19:32:25
【问题描述】:

可能重复:
Different names of JSON property during serialization and deserialization

我在我的网站上使用 Jackson 创建一个选项字符串,以与需要 JSON 的图表工具一起使用。例如,我有一个

public class Chart {
  Integer zIndex = 3;

  public Integer getZIndex() {
    return zIndex;
  }
}

然后我在我的图表上使用 Jackson 的 objectMapper,输出是 {"zindex":3} 我的问题是图表工具不会接受“zindex”,但坚持使用驼峰式的“zIndex”。 我该怎么做才能在输出中正确命名它? 我已经尝试过@JsonProperty("zIndex") 但这会在输出中生成两个副本,zindex 和 zIndex,这令人困惑且丑陋。另外,我正在使用 lombok 来生成我的吸气剂,如果这有影响的话。

我试过了:

public class FieldNamingStrategy extends PropertyNamingStrategy {

@Override
public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
    return field.getName();
}

}

然后 objectMapper.setPropertyNamingStrategy()

但这不起作用。

我的配置看起来像

String json = null;
StringWriter stringWriter = new StringWriter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
//TODO: figure this out
objectMapper.setPropertyNamingStrategy(new FieldNamingStrategy());
try {
final JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(stringWriter);
jsonGenerator.useDefaultPrettyPrinter();
objectMapper.writeValue(jsonGenerator, object);
json = stringWriter.toString();

【问题讨论】:

标签: java json jackson


【解决方案1】:

确保您使用的是现代版本的 Jackson:1.9 改进了对属性的处理,因此即使仅将注释添加到其中一个片段中也可以使用。

或者如果你不能这样做,只需将@JsonProperty 注释添加到 BOTH getter 和 field。

您的主要问题实际上是名称本身“不合规”,这意味着这些部分可能不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2020-02-12
    • 2015-03-20
    • 2021-04-02
    相关资源
    最近更新 更多