POJO

2014-09-26 10 views
12

को बदलने के बिना POJO मैपिंग के लिए केस असंवेदनशील JSON क्या कोई जानता है कि com.fasterxml.jackson.databind.ObjectMapper JSON गुणों को POJO गुणों के मामले में असंवेदनशील करने में सक्षम है?POJO

JSON-स्ट्रिंग:

[{"FIRSTNAME":"John","LASTNAME":"Doe","DATEOFBIRTH":"1980-07-16T18:25:00.000Z"}]

POJO-क्लास:

public class Person { 

    private String firstName; 
    private String lastName; 
    private Date dateOfBirth; 

    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public Date getDateOfBirth() { 
     return dateOfBirth; 
    } 
    public void setDateOfBirth(Date dateOfBirth) { 
     this.dateOfBirth = dateOfBirth; 
    } 
} 

टेस्ट वर्ग:

@Test 
public final void testDeserializingPersonJsonToPersonClass() 
     throws JsonParseException, JsonMappingException, IOException { 
    final String jsonAsString = "[{\"FIRSTNAME\":\"John\",\"LASTNAME\":\"Doe\",\"DATEOFBIRTH\":\"1980-07-16T18:25:00.000Z\"}]"; 
    final ObjectMapper mapper = new ObjectMapper(); 

    final Person person = mapper.readValue(jsonAsString, Person.class); 

    assertNotNull(person); 
    assertThat(person.getFirstName(), equalTo("John")); 
} 

यह निम्न त्रुटि में समाप्त होता है:
com.fasterxml। jackson.databind.JsonMappingException: उदाहरण का deserialize नहीं कर सकते हैं ...

न तो जेएसओएन-स्ट्रिंग और न ही POJO-Class को बदलना संभव नहीं है।

+1

* यह न तो JSON-स्ट्रिंग है और न ही POJO-क्लास * बदलने के लिए संभव नहीं है, तो यह संभव है। –

उत्तर

6

मुझे एक ही समस्या थी और इसे हल करने का वैश्विक तरीका नहीं मिला। लेकिन अगर आप प्रति प्रॉपर्टी 2 setters इस लक्ष्य को हासिल करने के लिए हो सकता है:

@JsonSetter("FIRSTNAME") 
public void setFirstNameCaps(String firstName) { 
    this.firstName = firstName; 
} 

@JsonSetter("firstName") 
public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

सुरुचिपूर्ण नहीं, लेकिन दोनों ऊपरी और निचले मामले json क्षेत्रों के लिए काम करेंगे। आप here का समाधान भी हल कर सकते हैं लेकिन इसमें प्रदर्शन ओवरहेड

0

मैं एक ही स्थिति में था और उसे मानचित्र में परिवर्तित करना था और फिर मानों को मैन्युअल रूप से कॉपी करना था।

import com.fasterxml.jackson.core.type.TypeReference; 

Map<String, String> map = 
    mapper.readValue(jsonAsString, new TypeReference<Map<String, String>>(){}); 
21

यह व्यवहार जैक्सन 2.5.0 में पेश किया गया था। आप MapperFeature का उपयोग करके मैपर को केस असंवेदनशील करने के लिए कॉन्फ़िगर कर सकते हैं। ACCEPT_CASE_INSENSITIVE_PROPERTIES

उदाहरण के लिए:

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); 
संबंधित मुद्दे