package com.fasterxml.jackson.databind.misc; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.*; public class CaseInsensitiveDeserTest extends BaseMapTest { // [databind#1036] static class BaseResponse { public int errorCode; public String debugMessage; } static class Issue476Bean { public Issue476Type value1, value2; } static class Issue476Type { public String name, value; } // [databind#1438] static class InsensitiveCreator { int v; @JsonCreator public InsensitiveCreator(@JsonProperty("value") int v0) { v = v0; } } /* /******************************************************** /* Test methods /******************************************************** */ private final ObjectMapper INSENSITIVE_MAPPER = new ObjectMapper(); { INSENSITIVE_MAPPER.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES); } // [databind#566] public void testCaseInsensitiveDeserialization() throws Exception { final String JSON = "{\"Value1\" : {\"nAme\" : \"fruit\", \"vALUe\" : \"apple\"}, \"valUE2\" : {\"NAME\" : \"color\", \"value\" : \"red\"}}"; // first, verify default settings which do not accept improper case ObjectMapper mapper = new ObjectMapper(); assertFalse(mapper.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)); try { mapper.readValue(JSON, Issue476Bean.class); fail("Should not accept improper case properties by default"); } catch (JsonProcessingException e) { verifyException(e, "Unrecognized field"); assertValidLocation(e.getLocation()); } // Definitely not OK to enable dynamically - the BeanPropertyMap (which is the consumer of this particular feature) gets cached. ObjectReader r = INSENSITIVE_MAPPER.readerFor(Issue476Bean.class); Issue476Bean result = r.readValue(JSON); assertEquals(result.value1.name, "fruit"); assertEquals(result.value1.value, "apple"); } // [databind#1036] public void testCaseInsensitive1036() throws Exception { final String json = "{\"ErrorCode\":2,\"DebugMessage\":\"Signature not valid!\"}"; // final String json = "{\"errorCode\":2,\"debugMessage\":\"Signature not valid!\"}"; BaseResponse response = INSENSITIVE_MAPPER.readValue(json, BaseResponse.class); assertEquals(2, response.errorCode); assertEquals("Signature not valid!", response.debugMessage); } // [databind#1438] public void testCreatorWithInsensitive() throws Exception { final String json = aposToQuotes("{'VALUE':3}"); InsensitiveCreator bean = INSENSITIVE_MAPPER.readValue(json, InsensitiveCreator.class); assertEquals(3, bean.v); } }