2017-08-23 32 views
0

私はRESTエンドポイントを公開するスプリングアプリケーションを持っており、その名前に "doAction"という名前を付けることができます。すべての所得データを強制的にいくつかのアプローチがありますJacksonが強制的にフィールド値を小文字にデシリアライズする

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) 

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

一部のクライアントは次のように、書き込みの単語の異なる練習にデータを渡すことによって、このエンドポイントを呼び出すことができます要求したように、オブジェクトを消費します小文字に解析されます(すべてのフィールドが文字列であると仮定できます)?

だから、結果として私が持っていることを望む:ジャクソン

Peter_1 
name = peter 
email = [email protected] 

Mark_2 
name = mark 
email = [email protected] 

Julia_3 
name = julia 
email = [email protected] 

ソリューションが高く評価されています。セッターここ

+0

のみの提案、のdidnそれをテストするのではなく、 'Person'クラスの値を小文字で保存するためのコンストラクタを書くのでしょうか? –

+0

あなたは春のデータ休憩を使用していますか? – ArslanAnjum

答えて

1

短い答えコールTOLOWERは一例です:

class Animal 
{ 
    private String name; 

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

私はまたtrimToNUlltrimToEmptyのいずれかをお勧めします。あなたは春のMVCで春データ休息を使用していて、すべての着信文字列データが小文字であることにしたい場合は、

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; 
     } 
    } 

} 

そして、次の次のように定義

0

@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; 
    } 
} 
関連する問題