2016-06-17 7 views
5

में एनोटेशन के रूप में SerializationFeature.WRAP_ROOT_VALUE को ObjectMapper का उपयोग करके मूल तत्व पर एनोटेशन के रूप में कॉन्फ़िगर करने का कोई तरीका है?SerializationFeature.WRAP_ROOT_VALUE जैक्सन जेसन

उदाहरण के लिए मेरे पास है:

@JsonRootName(value = "user") 
public class UserWithRoot { 
    public int id; 
    public String name; 
} 

ObjectMapper का उपयोग करना:

@Test 
public void whenSerializingUsingJsonRootName_thenCorrect() 
    throws JsonProcessingException { 
    UserWithRoot user = new User(1, "John"); 

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.enable(SerializationFeature.WRAP_ROOT_VALUE); 
    String result = mapper.writeValueAsString(user); 

    assertThat(result, containsString("John")); 
    assertThat(result, containsString("user")); 
} 

परिणाम:

{ 
    "user":{ 
     "id":1, 
     "name":"John" 
    } 
} 

इस SerializationFeature एक टिप्पणी के रूप और नहीं करने के लिए एक तरीका नहीं हैपर एक कॉन्फ़िगरेशन के रूप में?

का उपयोग निर्भरता:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.7.2</version> 
</dependency> 
+0

हो सकता है कि यह: http://stackoverflow.com/a/31158706/829571 भी देखें: https://github.com/FasterXML/jackson-annotations/issues/33 – assylias

+0

@ assylias हाँ उस जवाब भी देखा। लेकिन यह नहीं पता कि इसे कम ऊंट के मामले के रूप में कैसे प्राप्त किया जाए। 'उपयोगकर्ता' की आवश्यकता है और' उपयोगकर्ता' नहीं। सुनिश्चित नहीं है कि यह संभव है – Patrick

उत्तर

6
import com.fasterxml.jackson.annotation.JsonTypeInfo; 
import com.fasterxml.jackson.annotation.JsonTypeName; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class Test2 { 
    public static void main(String[] args) throws JsonProcessingException { 
     UserWithRoot user = new UserWithRoot(1, "John"); 

     ObjectMapper objectMapper = new ObjectMapper(); 

     String userJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); 

     System.out.println(userJson); 
    } 

    @JsonTypeName(value = "user") 
    @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) 
    private static class UserWithRoot { 
     public int id; 
     public String name; 
    } 
} 

@JsonTypeName और @JsonTypeInfo एक साथ यह संभव बनाते हैं।

परिणाम:

{ 
    "user" : { 
    "id" : 1, 
    "name" : "John" 
    } 
} 
+1

इसके लिए धन्यवाद, मैं विश्वास नहीं कर सकता कि प्रतिक्रिया को लपेटना कितना जटिल है। – Sean

+2

@ सेन - तो सच है, यह जटिल है और इसमें उपयोग करने में समय लगता है। वे '@ जेसनप्रैपर' या '@ जेसन रूटव्यू' जैसी कुछ चीज़ों के साथ आ सकते थे जो रैपर का नाम लेंगे। – Isank

संबंधित मुद्दे