在反序列化期间应用简单的字符串到字符串转换

Apply a simple string to string transformation during deserialization

是否有一种简单的方法可以在 bean 反序列化期间对特定键的值应用自定义逻辑转换?

具体的例子,我收到以下[​​=26=]:

{password: "1234"} 

并希望在反序列化时将特殊的哈希函数应用于密码值:

User [password: "6265b22b66502d70d5f004f08238ac3c"]

我知道我可以使用 setter User.setPassword() 并在此处应用哈希转换,但转换需要使用 "Service" classes,这些不可用在实体的上下文中(依赖注入的错误使用..)。此转换必须在实体代码之外进行。

User class 使用自定义反序列化器似乎对一个属性也太过分了。

使用注释为 bean 属性 定义自定义 serializer/deserializer。

这是一个 bean 示例,您可以在其中定义自定义 serializer/deserializer 类:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

public class User {

    @JacksonXmlProperty
    private String login;

    @JacksonXmlProperty
    @JsonSerialize(using=your.class.package.PasswordSerializer.class)
    @JsonDeserialize(using=your.class.package.PasswordDeserializer.class)
    private String password;
    // ... 
}

这里是自定义序列化程序示例:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;

import java.io.IOException;

public class PasswordSerializer extends JsonSerializer<String> {
    @Override
    public void serialize(String s, JsonGenerator jg, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {

         // do your staff here.

    }
}

你只需要实现一个接口,你可以在适当的包中实现。

反序列化器类似。