在反序列化期间应用简单的字符串到字符串转换
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.
}
}
你只需要实现一个接口,你可以在适当的包中实现。
反序列化器类似。
是否有一种简单的方法可以在 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.
}
}
你只需要实现一个接口,你可以在适当的包中实现。
反序列化器类似。