View Javadoc

1   package org.springframework.security.oauth2.provider.client;
2   
3   import java.io.IOException;
4   import java.util.Arrays;
5   import java.util.LinkedHashSet;
6   import java.util.Set;
7   
8   import org.codehaus.jackson.JsonParser;
9   import org.codehaus.jackson.JsonProcessingException;
10  import org.codehaus.jackson.JsonToken;
11  import org.codehaus.jackson.map.DeserializationContext;
12  import org.codehaus.jackson.map.deser.std.StdDeserializer;
13  import org.codehaus.jackson.map.type.SimpleType;
14  import org.codehaus.jackson.type.JavaType;
15  import org.codehaus.jackson.type.TypeReference;
16  import org.springframework.util.StringUtils;
17  
18  public class JacksonArrayOrStringDeserializer extends StdDeserializer<Set<String>> {
19  
20  	public JacksonArrayOrStringDeserializer() {
21  		super(Set.class);
22  	}
23  
24  	@Override
25  	public JavaType getValueType() {
26  		return SimpleType.construct(String.class);
27  	}
28  
29  	@Override
30  	public Set<String> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
31  			JsonProcessingException {
32  		JsonToken token = jp.getCurrentToken();
33  		if (token.isScalarValue()) {
34  			String list = jp.getText();
35  			list = list.replaceAll("\\s+", ",");
36  			return new LinkedHashSet<String>(Arrays.asList(StringUtils.commaDelimitedListToStringArray(list)));
37  		}
38  		return jp.readValueAs(new TypeReference<Set<String>>() {
39  		});
40  	}
41  }