Как преобразовать строковую переменную POJO в целое число при преобразовании в Json с помощью ObjectMapper? - PullRequest
1 голос
/ 06 апреля 2019

У меня есть Java класс, который имеет String переменную

String sampleNumber="1234";

Когда я конвертирую это Pojo в JSON, используя ObjectMapper, я получаю:

{
  "sampleNumber":"1234"
}

Но мне нужен целочисленный тип в JSON, как следует

{
  "sampleNumber":1234
}

Может ли кто-нибудь помочь мне получить ожидаемые результаты с помощью ObjectMapper?

1 Ответ

1 голос
/ 06 апреля 2019

Изменить свойство на int

Вы можете изменить свою собственность на int:

class Pojo {
    private int sampleNumber = 1234;

    // getters, setters
}

, и вы получите:

{
  "sampleNumber" : 1234
}

Добавить новоеметод получения с правильным типом

Если вы не хотите изменять тип свойства на int / Integer, вам нужно игнорировать getter, который возвращает String, и добавить новый getter, который вернет int / Integer:

class Pojo {
    private String sampleNumber = "1234";

    public Integer getSampleNumber() {
        return Integer.parseInt(sampleNumber);
    }

    @JsonIgnore
    public String getSampleNumberString() {
        return sampleNumber;
    }

    public void setSampleNumber(String sampleNumber) {
        this.sampleNumber = sampleNumber;
    }
}

Для выше POJO вы получите ниже JSON:

{
  "sampleNumber" : 1234
}

Напишите пользовательский сериализатор, который принудительно int

Вы можете написать собственный сериализатор, который пытается проанализировать String и записать его как Number:

class ForceIntSerializer extends StdScalarSerializer<Object> {

    public ForceIntSerializer() {
        super(Object.class);
    }

    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        if (value instanceof String) {
            try {
                gen.writeNumber(Integer.parseInt(value.toString()));
            } catch (NumberFormatException e) {
                gen.writeString(value.toString());
            }
        } else if (value instanceof Integer) {
            gen.writeNumber(((Integer) value));
        }
    }
}

Вы можете использовать его, как показано ниже:

class Pojo {
    private String sampleNumber = "1234";

    @JsonSerialize(using = ForceIntSerializer.class)
    public String getSampleNumber() {
        return sampleNumber;
    }
}

, и вы получитениже JSON:

{
  "sampleNumber" : 1234
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...