2017-08-23 4 views
0

Ich habe Feder-Anwendung, die REST-Endpunkt offenlegen, lassen Sie es nennen "DoAction". Da die Anfrage verbraucht Objekt:So erzwingen Jackson deserialize Feldwerte in Kleinbuchstaben

class Person{ 
private String name; 
private String email; 
} 

Einige Kunden, indem Daten mit unterschiedlichen Praxis des Schreibens Wörter diesen Endpunkt nennen kann, wie:

Peter_1 
name = Peter 
email = [email protected] (lower case) 

Mark_2 
name = mark 
email = [email protected] (upper case) 

Julia_3 
name = julia 
email = [email protected] (camel case) 

Gibt es einen Ansatz, der alle Einkommensdaten zu zwingen, sein in Kleinbuchstaben umgewandelt (angenommen, alle Felder sind Strings)?

So als Folge ich wünsche zu haben:

Peter_1 
name = peter 
email = [email protected] 

Mark_2 
name = mark 
email = [email protected] 

Julia_3 
name = julia 
email = [email protected] 

Lösung für Jackson geschätzt wird.

+0

nur ein Vorschlag, didn t teste es, aber vielleicht schreiben einen Konstruktor für die 'Person' Klasse, um die Werte in Kleinbuchstaben zu speichern? –

+0

verwenden Sie Federdaten Ruhe? – ArslanAnjum

Antwort

1

Kurze Antwort Anruf toLower in der Setter

Hier ist ein Beispiel:

class Animal 
{ 
    private String name; 

    public void setName(final String newValue) 
    { 
     StringUtils.trimToNull(StringUtils.lowerCase(newValue)); 
    } 
} 

ich auch entweder trimToNUll oder trimToEmpty empfehlen.

0

Wenn Sie mit Spring MVC Spring Data Erholung verwenden und Sie wollen alle eingehenden String-Daten in Kleinbuchstaben sein dann

public class StringSerializer extends StdDeserializer<String>{ 

    public StringSerializer() { 
     this(null); 
    } 

    public StringSerializer(Class<String> vc) { 
     super(vc); 
    } 

    @Override 
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
     JsonToken t = p.getCurrentToken(); 
     if (t==JsonToken.VALUE_STRING){ 
      String receivedValue = p.getText(); 
      if (receivedValue == null) 
       return null; 
      else 
       return receivedValue.toLowerCase(); 
     }else{ 
      return null; 
     } 
    } 

} 

folgende definieren und folgende:

@Configuration 
public class RestDataConfig extends RepositoryRestMvcConfiguration { 

    @Override 
    @Bean 
    public ObjectMapper halObjectMapper() { 

     ObjectMapper mapper = super.halObjectMapper(); 
     SimpleModule module = new SimpleModule(); 
     module.addDeserializer(String.class, new StringSerializer()); 
     mapper.registerModule(module); 
     return mapper; 
    } 
} 
Verwandte Themen