在bean反序列化期间,是否有一种简单的方法可以对特定键的值应用自定义逻辑转换?
具体示例,我收到以下json:
{password: "1234"}
并希望在反序列化时将特殊的哈希函数应用于密码值:
User [password: "6265b22b66502d70d5f004f08238ac3c"]
我知道我可以使用setter User.setPassword()
并在此处应用哈希转换,但转换需要使用" Service"在实体的上下文中不可用的类(使用依赖注入的错误...)。此转换必须在实体代码之外进行。
对User
类使用自定义反序列化器似乎对于一个属性来说也是过度的。
答案 0 :(得分:1)
使用注释为bean属性定义自定义序列化器/反序列化器。
以下是定义自定义序列化程序/反序列化程序类的bean的示例:
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;
// ...
}
这里是custo,序列化器示例:
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.
}
}
您只需要实现一个接口,然后就可以使用正确的包。
解串器类似。