2016-09-21 7 views
3

Beanの逆シリアル化中に特定のキーの値にカスタムロジック変換を適用する簡単な方法はありますか?デシリアライズ時にパスワードの値に適用される特別なハッシュ関数をデシリアライズ中に文字列変換に単純な文字列を適用する

{password: "1234"} 

としたい::

具体例として、私は次のようなJSONを受ける

User [password: "6265b22b66502d70d5f004f08238ac3c"] 

は私がセッターを使用することができます知っているUser.setPassword()とここでハッシュ変換を適用しますが、変換はエンティティのコンテキストで利用できない "サービス"クラスを使用する必要があります(依存関係注入の悪い使用..)。この変換は、エンティティコードの外で行う必要があります。

Userのカスタムデシリアライザを使用すると、1つの属性に対しても過度の攻撃に見えます。

+0

アノテーション* @ JsonSerialize *および* @ JsonDeserialize *を使用して、特定のインターフェイスを実装する特定のクラスを設定できます。だから、これらのクラスにすべてのシリアライズ/デシリアライズを入れることができます。 –

+0

@JsonDeserializeは有望ですが、私は今のところそれをどのように使用するのか分かりません。私はもっ​​と深く見ていきます。 –

答えて

2

注釈を使用して、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; 
    // ... 
} 

そしてここクスト、シリアライザ例:

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. 

    } 
} 

あなただけのインターフェイスを実装する必要がありますあなたは適切なパッケージで行うことができます。

デシリアライザも同様です。

+0

ありがとう、あなたの答えは途中で私を得た。しかし、私は別のポイントを解決する必要があります。私はSpringのコンテキストにあり、Deserializerクラスにサービスを注入する必要があります。 –

+0

@tibenこれはSpringでは問題ではありませんが、Springコンポーネントにインタフェースを実装し、必要なBean /コンポーネントを注入できます。 –

+0

Justeはテストを行い、MyDeserializerクラスで '@ Autowired'を使用できません。 @Comsonを使用しているにもかかわらず、@ JsonDeserialize(using = MyDeserializer.class)を使用すると、私のDeserializerの 'new'インスタンスがSpringの依存性注入機構の外側にインスタンス化されるため、NullPointExceptionが発生します。しかし、オーバーホール私はこれは別の質問だと思うので、私はあなたの答えを受け入れるので、私の問題の大きな部分を解決します。 –

関連する問題