Джексон сериализует POJO в JS Object - PullRequest
0 голосов
/ 28 марта 2019
class Foo {
  String name = "Bar";
}

Сериализация вышеуказанного объекта с использованием ObjectMapper().convertValue(foo, JsonNode::class) вернет объект JSON как:

{
  "name": "Bar"
}

Однако мой желаемый результат:

{
  name: "Bar"
}  

Я пробовал собственный сериализаторно он всегда записывает ключи в виде строк.Есть ли способ сериализации моего POJO в этом формате, используя Джексона или любую его аннотацию, чтобы избежать замены символов или построения строки самостоятельно.

1 Ответ

1 голос
/ 28 марта 2019

Помимо того, что ваш "JSON" больше не будет действительным, вы можете отключить JsonGenerator.Feature.QUOTE_FIELD_NAMES в вашем ObjectMapper.

ObjectMapper mapper = new ObjectMapper()
        .disable(JsonGenerator.Feature.QUOTE_FIELD_NAMES);

Результат mapper.writeValueAsString(new Foo()) будет:

{name:"Bar"}

Чтобы включить красивую печать, вы можете использовать:

ObjectMapper mapper = new ObjectMapper()
        .disable(JsonGenerator.Feature.QUOTE_FIELD_NAMES)
        .enable(SerializationFeature.INDENT_OUTPUT);

Или используйте это в шаге вывода:

String result = mapper
        .writerWithDefaultPrettyPrinter()
        .writeValueAsString(new Foo());

Результат в обоих случаях будет:

{
  name : "Bar"
}
...