0

可能重复:
序列化和反序列化期间 JSON 属性的不同名称

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

public class Chart {
  Integer zIndex = 3;

  public Integer getZIndex() {
    return zIndex;
  }
}

所以然后我在我的图表上使用杰克逊的 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();

4

1 回答 1

0

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

或者,如果您不能这样做,只需在@JsonPropertygetter 和字段中添加注释。

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

于 2012-08-02T17:47:18.197 回答