2017-08-23 52 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; 
    } 
} 
相关问题