Джексон сериализует класс с несколькими статическими фабриками, устанавливающими одно и то же значение - PullRequest
0 голосов
/ 05 октября 2018

Предположим, у меня есть класс с именем "SampleDto", который я хочу сериализовать и десериализовать, используя Джексона.Теперь в следующем фрагменте кода всегда вызывается RuntimeException.Как я могу пойти о сериализации / десериализации в этом классе?Некоторые примеры сериализации / десериализации кода будут приветствоваться.

public class SampleDto {

    private static final String VALUE = "value";

    private final Object val;
    private final String someAttr;

    @JsonCreator
    private SampleDto(Object object, String attr) {
        this.val = object;
        this.someAttr = attr;
    }

    @JsonCreator
    public static SampleDto fromInt(int someInt) {
        return new SampleDto(someInt, "INT");
    }

    @JsonCreator
    public static SampleDto fromBool(boolean someBool ) {
        return new SampleDto(someBool, "BOOL");
    }

    public static SampleDto fromList(List<SampleDto> listOfSampleDto) {
        return new SampleDto(listOfSampleDto, "LIST"); 
    }

    @JsonProperty(BOOL_VAL)
    public boolean getBooleanVal() {
        if (this.someAttr != "BOOL") {
            throwEx("From BOOL");
        }
        return (Boolean) this.val;
    }

    @JsonProperty(INT_VAL)
    public int getIntegerVal() {
        if (this.someAttr != "INT") {
            throwEx("From INT");
        }
        return ((Number) this.val).intValue();
    }

    private static void throwEx(String type) {
        throw new RuntimeException(type);
    }

    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        SampleDto sampleDto = SampleDto.fromBool(true);
        try {
            String valueAsString = objectMapper.writeValueAsString(sampleDto);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}
...