2017-08-23 84 views
0

我有暴露REST端點的spring應用程序,我們將其命名爲「doAction」。由於要求其消耗對象:如何強制Jackson將字段值反序列化爲小寫

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

一些客戶可以通過書面字不同的做法傳遞數據,比如調用這個端點:

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) 

有一些方法來強制所有收入數據解析爲小寫(假設所有字段都是字符串)?

因此,作爲一個結果,我渴望有:

Peter_1 
name = peter 
email = [email protected] 

Mark_2 
name = mark 
email = [email protected] 

Julia_3 
name = julia 
email = [email protected] 

解決方案傑克遜表示讚賞。在二傳手

這裏

+0

只是一個建議,沒沒有測試它,但也許爲'Person'類編寫一個構造函數來以小寫形式存儲值? –

+0

你使用彈簧數據休息嗎? – ArslanAnjum

回答

1

簡短的回答呼叫TOLOWER是一個例子:

class Animal 
{ 
    private String name; 

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

我還建議,要麼trimToNUlltrimToEmpty

0

如果您在使用Spring數據休息與Spring 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; 
     } 
    } 

} 

與以下:

@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; 
    } 
} 
相關問題