【问题标题】:How to convert String variable of POJO as Integer while converting to Json using ObjectMapper?如何在使用 ObjectMapper 转换为 Json 时将 POJO 的 String 变量转换为 Integer?
【发布时间】:2019-08-28 03:28:05
【问题描述】:

我有 Java 类,其中有 String 变量成员

String sampleNumber="1234";

当我使用 ObjectMapperPojo 转换为 JSON 时,我得到:

{
  "sampleNumber":"1234"
}

但我需要JSON 中的整数类型,如下所示

{
  "sampleNumber":1234
}

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

【问题讨论】:

    标签: java json serialization jackson objectmapper


    【解决方案1】:

    将属性更改为int

    您可以将您的属性更改为int

    class Pojo {
        private int sampleNumber = 1234;
    
        // getters, setters
    }
    

    你会得到:

    {
      "sampleNumber" : 1234
    }
    

    添加具有正确类型的新 getter

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2019-12-06
      • 2021-02-21
      • 2013-08-03
      相关资源
      最近更新 更多