1 package com.fasterxml.jackson.databind.ser.impl;
2
3 import com.fasterxml.jackson.core.JsonGenerator;
4
5 import com.fasterxml.jackson.databind.*;
6 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
7 import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
8 import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;
9 import com.fasterxml.jackson.databind.util.NameTransformer;
10
11 import java.io.IOException;
12 import java.util.Set;
13
14 public class UnwrappingBeanSerializer
15 extends BeanSerializerBase
16 implements java.io.Serializable
17 {
18 private static final long serialVersionUID = 1L;
19
20
24 protected final NameTransformer _nameTransformer;
25
26
31
32
36 public UnwrappingBeanSerializer(BeanSerializerBase src, NameTransformer transformer) {
37 super(src, transformer);
38 _nameTransformer = transformer;
39 }
40
41 public UnwrappingBeanSerializer(UnwrappingBeanSerializer src,
42 ObjectIdWriter objectIdWriter) {
43 super(src, objectIdWriter);
44 _nameTransformer = src._nameTransformer;
45 }
46
47 public UnwrappingBeanSerializer(UnwrappingBeanSerializer src,
48 ObjectIdWriter objectIdWriter, Object filterId) {
49 super(src, objectIdWriter, filterId);
50 _nameTransformer = src._nameTransformer;
51 }
52
53 protected UnwrappingBeanSerializer(UnwrappingBeanSerializer src, Set<String> toIgnore) {
54 super(src, toIgnore);
55 _nameTransformer = src._nameTransformer;
56 }
57
58
59 protected UnwrappingBeanSerializer(UnwrappingBeanSerializer src,
60 BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) {
61 super(src, properties, filteredProperties);
62 _nameTransformer = src._nameTransformer;
63 }
64
65
70
71 @Override
72 public JsonSerializer<Object> unwrappingSerializer(NameTransformer transformer) {
73
74 return new UnwrappingBeanSerializer(this, transformer);
75 }
76
77 @Override
78 public boolean isUnwrappingSerializer() {
79 return true;
80 }
81
82 @Override
83 public BeanSerializerBase withObjectIdWriter(ObjectIdWriter objectIdWriter) {
84 return new UnwrappingBeanSerializer(this, objectIdWriter);
85 }
86
87 @Override
88 public BeanSerializerBase withFilterId(Object filterId) {
89 return new UnwrappingBeanSerializer(this, _objectIdWriter, filterId);
90 }
91
92 @Override
93 protected BeanSerializerBase withIgnorals(Set<String> toIgnore) {
94 return new UnwrappingBeanSerializer(this, toIgnore);
95 }
96
97 @Override
98 protected BeanSerializerBase withProperties(BeanPropertyWriter[] properties,
99 BeanPropertyWriter[] filteredProperties) {
100 return new UnwrappingBeanSerializer(this, properties, filteredProperties);
101 }
102
103
107 @Override
108 protected BeanSerializerBase asArraySerializer() {
109 return this;
110 }
111
112
117
118
123 @Override
124 public final void serialize(Object bean, JsonGenerator gen, SerializerProvider provider) throws IOException
125 {
126 gen.setCurrentValue(bean);
127 if (_objectIdWriter != null) {
128 _serializeWithObjectId(bean, gen, provider, false);
129 return;
130 }
131 if (_propertyFilterId != null) {
132 serializeFieldsFiltered(bean, gen, provider);
133 } else {
134 serializeFields(bean, gen, provider);
135 }
136 }
137
138 @Override
139 public void serializeWithType(Object bean, JsonGenerator gen, SerializerProvider provider,
140 TypeSerializer typeSer) throws IOException
141 {
142 if (provider.isEnabled(SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS)) {
143 provider.reportBadDefinition(handledType(),
144 "Unwrapped property requires use of type information: cannot serialize without disabling `SerializationFeature.FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS`");
145 }
146 gen.setCurrentValue(bean);
147 if (_objectIdWriter != null) {
148 _serializeWithObjectId(bean, gen, provider, typeSer);
149 return;
150 }
151 if (_propertyFilterId != null) {
152 serializeFieldsFiltered(bean, gen, provider);
153 } else {
154 serializeFields(bean, gen, provider);
155 }
156 }
157
158
163
164 @Override public String toString() {
165 return "UnwrappingBeanSerializer for "+handledType().getName();
166 }
167 }
168