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.springframework.util.StringUtils;
9   
10  import com.fasterxml.jackson.core.JsonParser;
11  import com.fasterxml.jackson.core.JsonProcessingException;
12  import com.fasterxml.jackson.core.JsonToken;
13  import com.fasterxml.jackson.core.type.TypeReference;
14  import com.fasterxml.jackson.databind.DeserializationContext;
15  import com.fasterxml.jackson.databind.JavaType;
16  import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
17  import com.fasterxml.jackson.databind.type.SimpleType;
18  
19  @SuppressWarnings("serial")
20  public class Jackson2ArrayOrStringDeserializer extends StdDeserializer<Set<String>> {
21  
22  	public Jackson2ArrayOrStringDeserializer() {
23  		super(Set.class);
24  	}
25  
26  	@Override
27  	public JavaType getValueType() {
28  		return SimpleType.construct(String.class);
29  	}
30  
31  	@Override
32  	public Set<String> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
33  			JsonProcessingException {
34  		JsonToken token = jp.getCurrentToken();
35  		if (token.isScalarValue()) {
36  			String list = jp.getText();
37  			list = list.replaceAll("\\s+", ",");
38  			return new LinkedHashSet<String>(Arrays.asList(StringUtils.commaDelimitedListToStringArray(list)));
39  		}
40  		return jp.readValueAs(new TypeReference<Set<String>>() {
41  		});
42  	}
43  }