@Override public Coin deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonToken token = p.getCurrentToken(); switch (token) { case VALUE_NUMBER_FLOAT: BigDecimal bd = p.getDecimalValue(); return BitcoinMath.btcToCoin(bd); case VALUE_NUMBER_INT: long val = p.getNumberValue().longValue(); // should be optimal, whatever it is return Coin.valueOf(val); default: return (Coin) ctxt.handleUnexpectedToken(Coin.class, p); } } }