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

时间:2016-09-21 12:35:03

标签: java jackson spring-data-rest

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

具体示例,我收到以下json:

{password: "1234"} 

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

User [password: "6265b22b66502d70d5f004f08238ac3c"]

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

User类使用自定义反序列化器似乎对于一个属性来说也是过度的。

1 个答案:

答案 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.

    }
}

您只需要实现一个接口,然后就可以使用正确的包。

解串器类似。