JacksonライブラリJson to Object


xmlは、soap結果にオブジェクトマッピングのコードを正確に記録する.
JacksonはSpringBootに含まれるバージョンです.
2021年6月
  • SpringBoot 2.2.6
  • Groovy 2.5
  • Pojo、DTO、VOなどターゲットカテゴリのマッピング
    class Data {
      def a
      def b
      
      def getA() {
        return a
      }
      def setA(def a) {
        this.a = a
      }
      ...
    }
    マッピングコード
    def json = ...
    
    ObjectMapper objectMapper = new ObjectMapper()
    // 객체에 정의되지 않은 필드가 있더라도 무시
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
    // 배열이 아닌 객체라도 List 변수에 할당 가능
    objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)
    ... 각종 설정 ... 빌더 패턴도 지원되는걸로 보임
    Data data = objectMapper.readValue(json, Data.class);
    しかし、jsonフィールド名とオブジェクトのフィールド名が違うとしたら?
    (ex){"b":"123"}上のオブジェクトメンバー変数aに割り当てる.
    class Data {
      def a
      
      def getA() {
        return a
      }
      @JsonSetter('b') // 요 어노테이션을 지정합니다.
      def setA(def a) {
        this.a = a
      }
      ...
    }
    しかし@JsonSetterを書き終えてオブジェクトをJsonに再変換したときaが消えてbになった?
    { "b": "123"} -> Data -> { "b": "123"}
    class Data {
      def a
      
      @JsonGetter('a') // a 로 생성하기 위해 요 어노테이션을 써줍니다.
      def getA() {
        return a
      }
      @JsonSetter('b')
      def setA(def a) {
        this.a = a
      }
      ...
    }
    では、この場合、getter/setterを常に位置決めすべきではないでしょうか.
    他に方法がある.
    class Data {
      @JsonAlias('b') // 요 어노테이션 하나면 됩니다.
      def a
      
      def getA() {
        return a
      }
      def setA(def a) {
        this.a = a
      }
      ...
    }
    @JsonAliasはJackson 2.9からサポートされています.
    1つのメンバー変数に複数のAliasを指定することもできます.
    (注意)Jackson 2.9に追加された@JsonAliasプレゼンテーション