0

使用DefaultObjectMapperfrom jackson-scala-module,在以下示例中,在 Scala 版本field 序列化,但在 Java 版本中不序列化。设置com.fasterxml.jackson.databind.MapperFeature.AUTO_DETECT_FIELDS没有效果。

我希望没有字段被序列化,除非一个字段用com.fasterxml.jackson.annotation.JsonInclude.

斯卡拉

class ScalaClass {
  val field = "someField"
}

爪哇

public class JavaClass {
  public String field = "someField";
}
4

1 回答 1

3

相反,禁用MapperFeature.AUTO_DETECT_GETTERS@JsonGetter在字段上使用。

这对我有用:

import com.fasterxml.jackson.annotation.JsonGetter
import com.fasterxml.jackson.databind.{MapperFeature, ObjectMapper, SerializationFeature}
import com.fasterxml.jackson.module.scala.DefaultScalaModule

val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)

mapper.disable(MapperFeature.AUTO_DETECT_GETTERS)
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)

class ScalaClass {
  val field = "someField"
  @JsonGetter val includedField = "fieldValue"
}

mapper.writer().writeValueAsString(new ScalaClass) // => res: String = {"includedField":"fieldValue"}

Java 类比您的 Scala 类更有可能是:

public class JavaClass {
    public String getField() { return "someField"; }
}

UPDATE:用于@JsonGetter在序列化中包含该字段。

于 2017-03-05T17:32:10.323 回答