package com.fasterxml.jackson.databind.convert; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.exc.MismatchedInputException; public class NumericConversionTest extends BaseMapTest { private final ObjectMapper MAPPER = objectMapper(); private final ObjectReader R = MAPPER.reader().without(DeserializationFeature.ACCEPT_FLOAT_AS_INT); public void testDoubleToInt() throws Exception { // by default, should be ok Integer I = MAPPER.readValue(" 1.25 ", Integer.class); assertEquals(1, I.intValue()); IntWrapper w = MAPPER.readValue("{\"i\":-2.25 }", IntWrapper.class); assertEquals(-2, w.i); int[] arr = MAPPER.readValue("[ 1.25 ]", int[].class); assertEquals(1, arr[0]); try { R.forType(Integer.class).readValue("1.5"); fail("Should not pass"); } catch (JsonMappingException e) { verifyException(e, "Can not coerce a floating-point"); } try { R.forType(Integer.TYPE).readValue("1.5"); fail("Should not pass"); } catch (JsonMappingException e) { verifyException(e, "Can not coerce a floating-point"); } try { R.forType(IntWrapper.class).readValue("{\"i\":-2.25 }"); fail("Should not pass"); } catch (JsonMappingException e) { verifyException(e, "Can not coerce a floating-point"); } try { R.forType(int[].class).readValue("[ 2.5 ]"); fail("Should not pass"); } catch (JsonMappingException e) { verifyException(e, "Can not coerce a floating-point"); } } public void testDoubleToLong() throws Exception { // by default, should be ok Long L = MAPPER.readValue(" 3.33 ", Long.class); assertEquals(3L, L.longValue()); LongWrapper w = MAPPER.readValue("{\"l\":-2.25 }", LongWrapper.class); assertEquals(-2L, w.l); long[] arr = MAPPER.readValue("[ 1.25 ]", long[].class); assertEquals(1, arr[0]); try { R.forType(Long.class).readValue("1.5"); fail("Should not pass"); } catch (MismatchedInputException e) { verifyException(e, "Can not coerce a floating-point"); } try { R.forType(Long.TYPE).readValue("1.5"); fail("Should not pass"); } catch (MismatchedInputException e) { verifyException(e, "Can not coerce a floating-point"); } try { R.forType(LongWrapper.class).readValue("{\"l\": 7.7 }"); fail("Should not pass"); } catch (MismatchedInputException e) { verifyException(e, "Can not coerce a floating-point"); } try { R.forType(long[].class).readValue("[ 2.5 ]"); fail("Should not pass"); } catch (MismatchedInputException e) { verifyException(e, "Can not coerce a floating-point"); } } }