Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何强制Jackson将字段值反序列化为小写_Spring_Jackson_Deserialization - Fatal编程技术网

Spring 如何强制Jackson将字段值反序列化为小写

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

我有一个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.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;
    }
}