我有暴露REST端点的spring应用程序,让它命名为“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.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
对杰克逊的解决方案表示赞赏。
答案 0 :(得分:1)
简短回答在setter中调用toLower
以下是一个例子:
class Animal
{
private String name;
public void setName(final String newValue)
{
StringUtils.trimToNull(StringUtils.lowerCase(newValue));
}
}
我还建议使用trimToNUll
或trimToEmpty
。
答案 1 :(得分:0)
如果您正在使用带有spring mvc的Spring Data Rest并且您希望所有传入的字符串数据都是小写的,那么请定义以下
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;
}
}