使用ObjectMapper转换为Json时,如何将POJO的String变量转换为Integer?

时间:2019-04-06 11:40:30

标签: java json serialization jackson objectmapper

我有Java类,该类具有String个可变成员

String sampleNumber="1234";

当我使用PojoJSON转换为ObjectMapper时,我得到:

{
  "sampleNumber":"1234"
}

但是我需要在JSON中使用以下整数类型

{
  "sampleNumber":1234
}

有人可以帮助我使用ObjectMapper获得预期的结果吗?

1 个答案:

答案 0 :(得分:1)

将属性更改为int

您可以将属性更改为int

class Pojo {
    private int sampleNumber = 1234;

    // getters, setters
}

您将获得:

{
  "sampleNumber" : 1234
}

添加正确类型的新吸气剂

如果您不想将属性类型更改为int / Integer,则需要忽略返回getter的{​​{1}}并添加新的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