Spring 如何强制Jackson将字段值反序列化为小写
我有一个spring应用程序,它公开REST端点,我们把它命名为“doAction”。作为请求,它使用对象:Spring 如何强制Jackson将字段值反序列化为小写,spring,jackson,deserialization,Spring,Jackson,Deserialization,我有一个spring应用程序,它公开REST端点,我们把它命名为“doAction”。作为请求,它使用对象: class Person{ private String name; private String email; } 一些客户端可以通过使用不同的文字书写方法传递数据来调用此端点,如: Peter_1 name = Peter email = peter@gmail.com (lower case) Mark_2 name = mark email = MARK@gmail.co
class Person{
private String name;
private String email;
}
一些客户端可以通过使用不同的文字书写方法传递数据来调用此端点,如:
Peter_1
name = Peter
email = peter@gmail.com (lower case)
Mark_2
name = mark
email = MARK@gmail.com (upper case)
Julia_3
name = julia
email = JuliaToward@gmail.com (camel case)
是否有办法强制将所有收入数据解析为小写(假设所有字段都是字符串)?
因此,我希望:
Peter_1
name = peter
email = peter@gmail.com
Mark_2
name = mark
email = mark@gmail.com
Julia_3
name = julia
email = juliatoward@gmail.com
感谢为杰克逊提供的解决方案。简短回答呼叫二传手托洛 以下是一个例子:
class Animal
{
private String name;
public void setName(final String newValue)
{
StringUtils.trimToNull(StringUtils.lowerCase(newValue));
}
}
我还建议使用
TrimtoFull
或trimToEmpty
如果您将Spring数据Rest与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;
}
}
}
只是一个建议,没有对它进行测试,但是可能为
Person
类编写一个构造函数来以小写形式存储值?您使用的是spring数据rest吗?
@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;
}
}