Mapper:
public static ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.enable(SerializationFeature.INDENT_OUTPUT);
Класс для сериализации:
@Builder(builderClassName = "GooglePlayGameBuilder", toBuilder = true)
@JsonDeserialize(builder = GooglePlayGame.GooglePlayGameBuilder.class)
public final class GooglePlayGame {
@JsonProperty("Title") private final String title;
@JsonProperty("Genre") private final String genre;
@JsonProperty("Price") private final String price;
@JsonProperty("Last updated") private final String lastUpdated;
@JsonProperty("Current version") private final String currentVersion;
@JsonProperty("Requirements") private final String requiresAndroid;
@JsonProperty("IAP") private final String IAP;
@JsonProperty("Contacts") private final String devEmail;
...
Добавить объект на карту, а затем я хочу сериализовать мою карту:
public static volatile ConcurrentMap<String, GooglePlayGame> games = new ConcurrentSkipListMap<>(String.CASE_INSENSITIVE_ORDER);
Write в файл:
public static void saveLibraryToFile(){
try {
mapper.writeValue(new File(LIBRARY_FILENAME), games);
} catch (IOException e) {
log.error("[Couldn't write to file] ", e.getMessage());
}
}
После этого мой JSON будет выглядеть следующим образом:
{
"Never Alone: Ki Edition" : {
"Title" : "Never Alone: Ki Edition",
"Genre" : "Adventures",
"Price" : "4,99 €",
"Last updated" : "September 15, 2016",
"Current version" : "1.0.0",
"Requirements" : "2.3+",
"IAP" : "nope",
"Contacts" : "support@neveralonegame.com"
},
...
Если я буду комментировать свой класс с помощью lombok @Getter, появится странное поле:
{
"Never Alone: Ki Edition" : {
"iap" : "nope"
"Title" : "Never Alone: Ki Edition",
"Genre" : "Adventures",
"Price" : "4,99 €",
"Last updated" : "September 15, 2016",
"Current version" : "1.0.0",
"Requirements" : "2.3+",
"IAP" : "nope",
"Contacts" : "support@neveralonegame.com"
},
Я не понимаю это поле:
"iap" : "nope"
Откуда Джексон его нашел? Я проверил свою локальную карту с журналами и все в порядке, это поле не существует, но во время сериализации оно появляется.