2013-01-06 68 views
4

我有一个或多或少是一个围绕double的包装类。当我通过jackson序列化我的类时,我会收到类似于:{“value”:123.0}。我基本上想要发生的是,杰克逊只给我123.0。如果我可以扩展Number,我的问题就可以解决,但由于我已经扩展了另一个类,所以这不是一个选项。Jackson:将对象当作原始对象

类:

@JsonIgnoreProperties(ignoreUnknown = true) 
@SuppressWarnings("unused") 
public class TestValue { 
    @JsonProperty 
    private final Double d; 

    public TestValue(Double d) { 
     this.d = d; 
    } 
} 

结果:

{ 
    "d" : 123.0 
} 

什么工作像预期:

public class TestValue extends Number { 
    private final Double d; 

    public TestValue(Double d) { 
     this.d = d; 
    } 

    public double doubleValue() { 
     return d; 
    } 

    public float floatValue() { 
     return d.floatValue(); 
    } 

    public int intValue() { 
     return d.intValue(); 
    } 

    public long longValue() { 
     return d.longValue(); 
    } 

    public String toString() { 
     return d.toString(); 
    } 
} 

..这导致:123.0

但是 - 你知道 - 我已经在延伸另一个抽象类。我怎样才能得到expteced结果?

回答

4

因为我相信somene可以重复利用这一点,我会回答我的问题(与感谢加文显示我的方式):

public class TestValue { 
    private final Double d; 

    public TestValue(Double d) { 
     this.d = d; 
    } 

    @JsonValue 
    public Double getValue() { 
     return d; 
    } 
} 
2

看起来您要自定义序列化,请参阅here

+0

谢谢,这导致我到正确的方向。其实它让我到另一个问题:http://stackoverflow.com/questions/7161638/how-do-i-use-a-custom-serializer-with-jackson所以解决方案更简单使用@JsonValue annontation是对我来说足够了 - 谢谢! – KIC

+0

很高兴帮助。 @KIC –

1

首先,创建一个类型为TestValue的自定义序列化程序。

public class TestValueSerializer extends JsonSerializer<TestValue> { 
@Override 
public void serialize(TestValue value, JsonGenerator gen, SerializerProvider provider) throws IOException, 
     JsonProcessingException { 
    gen.writeString(value.toString()); 
} 

}

然后之前TestValue类型添加注解@JsonSerialize(using=TestValueSerializer.class)

顺便说一句,即使TestValue还没有扩展其他类,最好避免从Number扩展它。谨慎使用实现继承。

相关问题