JsonUtils.java

package io.github.giulong.spectrum.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.json.JsonMapper;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;

import java.io.File;

import static lombok.AccessLevel.PRIVATE;

@NoArgsConstructor(access = PRIVATE)
public final class JsonUtils {

    private static final JsonUtils INSTANCE = new JsonUtils();

    private final ObjectMapper jsonMapper = JsonMapper
            .builder()
            .build()
            .setDefaultMergeable(true);

    private final ObjectWriter writer = jsonMapper
            .writerWithDefaultPrettyPrinter();

    public static JsonUtils getInstance() {
        return INSTANCE;
    }

    @SneakyThrows
    public <T> T readOrEmpty(final File file, final Class<T> clazz) {
        return file.exists()
                ? jsonMapper.readValue(file, clazz)
                : jsonMapper.readValue("{}", clazz);
    }

    @SneakyThrows
    public String write(final Object object) {
        return writer.writeValueAsString(object);
    }
}