1 package com.fasterxml.jackson.databind.deser.std;
2
3 import java.io.IOException;
4
5 import com.fasterxml.jackson.core.*;
6 import com.fasterxml.jackson.databind.*;
7 import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
8 import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
9
10 @JacksonStdImpl
11 public class StringDeserializer extends StdScalarDeserializer<String>
12 {
13 private static final long serialVersionUID = 1L;
14
15
18 public final static StringDeserializer instance = new StringDeserializer();
19
20 public StringDeserializer() { super(String.class); }
21
22
23 @Override
24 public boolean isCachable() { return true; }
25
26 @Override
27 public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingException {
28 return "";
29 }
30
31 @Override
32 public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
33 {
34 if (p.hasToken(JsonToken.VALUE_STRING)) {
35 return p.getText();
36 }
37 JsonToken t = p.currentToken();
38
39 if (t == JsonToken.START_ARRAY) {
40 return _deserializeFromArray(p, ctxt);
41 }
42
43 if (t == JsonToken.VALUE_EMBEDDED_OBJECT) {
44 Object ob = p.getEmbeddedObject();
45 if (ob == null) {
46 return null;
47 }
48 if (ob instanceof byte[]) {
49 return ctxt.getBase64Variant().encode((byte[]) ob, false);
50 }
51
52 return ob.toString();
53 }
54
55
56
57 if (t.isScalarValue()) {
58 String text = p.getValueAsString();
59 if (text != null) {
60 return text;
61 }
62 }
63 return (String) ctxt.handleUnexpectedToken(_valueClass, p);
64 }
65
66
67
68 @Override
69 public String deserializeWithType(JsonParser p, DeserializationContext ctxt,
70 TypeDeserializer typeDeserializer) throws IOException {
71 return deserialize(p, ctxt);
72 }
73 }
74