環境情報

  • java

    • 1.8
      java version "1.8.0_45"
      Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
      
  • jackson

    • 2.7.4
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-core</artifactId>
              <version>2.7.4</version>
          </dependency>
      

内容

Liblaryバグでとあるデータクラスのとある gettercallされると、
必ず、 Cast Errorなるという状況になってしまい、
エラーとなるフィールドの情報自体は不要なので、アノテーション使わずに、
除外フィールドを指定することができないか調べてみたところ、
以下のようなサイトが見つかりました。

2.7.4で試してみたところ、

    ObjectMapper om = new ObjectMapper();
    om.getSerializationConfig().addMixInAnnotations(Person.class, PersonMixin.class);
いう記述は、メソッドが削除されてできず、

     ObjectMapper mapper2 = new ObjectMapper();
     mapper2.addMixInAnnotations(User.class, UserMixin.class);

という記述は、非推奨になっており、以下のように記述しました。

    static interface SongIgnore {
        @JsonIgnore
        String getAnalysis();
    }

    /**
     * toMap4EchonestSong
     *
     * @param song
     * @return
     */
    public static Map<String, Object> toMap4EchonestSong(Song song) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.addMixIn(Song.class, SongIgnore.class);
        Map<String, Object> map = mapper.convertValue(song, Map.class);
        return map;
    }

Version Up早くて、ちょいちょい公開API 変わってきますね..
名前長いですが使う側は混乱を考えると、addMixInAnnotationsでも良いだろと個人的には、思ったりします.
以上です。

コメント