Jackson:使用注释将BigDecimal反序列化为纯String

时间:2015-12-10 10:40:36

标签: java json serialization jackson

我有这个REST响应:

{
    //more fields...
    prevValue: 10104401
}

这个POJO:

public class Parameter {

    //More fields...

    private String prevValue;

    //Getters and setters

}

我在RestTemplate使用Spring MappingJackson2HttpMessageConverter。通过上述回复,prevValue被反序列化为String,如1.0104401E7,用科学记数法表示。

我希望在没有科学记数法的情况下对其进行反序列化。有没有办法使用杰克逊注释来做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用Jackson自定义反序列化器API来获得所需的结果。 请参阅以下示例:

public class Test {

    public static void main(String[] args) throws Exception {
        ObjectMapper om = new ObjectMapper();
        Parameter p = om.readValue("{\"prevValue\": 101044012342343543}", Parameter.class);
        System.out.println(p.prevValue);
    }

    public static class Number2StringDesrializer extends JsonDeserializer<String> {

        @Override
        public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
            Number n = p.getNumberValue();
            return n.toString();
        }

    }

    public static class Parameter {

        @JsonDeserialize(using = Number2StringDesrializer.class)
        private String prevValue;

        public void setPrevValue(String prevValue) {
            this.prevValue = prevValue;
        }


        public String getPrevValue() {
            return prevValue;
        }
    }
}