0

Jackson に JSON 名を無視するように指示するにはどうすればよいですか?

私は次のPOJOを持っています:

class MyPojo {
   private String ABCName;
}

次のようなものがある場合:

"ABCName" : "foo" の場合、Jackson はエラーをスローすることを認識しません。

次のようなものが期待されます。

"abcName" : "foo".

コード:

import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;

    public class TestJackson {

        public static void main(String args[]) throws Exception {

            ObjectMapper mapper = new ObjectMapper();
            MyPojo my = new MyPojo();
            my.setABCName("Foo");
            System.out.println(mapper.writeValueAsString(my));

        }

        private static class MyPojo {


            private String ABCName;
            public void setABCName(String ABCName) {
                this.ABCName = ABCName;
            }

            public String getABCName() {
                return ABCName;
            }
        }

    }

出力: {"abcname":"Foo"}

次に、ABCName に @JsonProperty("ABCName") というアノテーションを付けてみました。

コードに注釈を付けて実行すると、次のようになりました: {"ABCName":"Foo","abcname":"Foo"}

重複する結果になりました。

"ABCName" : "Foo" として送信する JSON クライアントがあり、Jackson で処理する必要があります。

これに対する回避策はありますか?

御時間ありがとうございます。

4

3 に答える 3

0

実際には、以下がジャクソン自体で機能しました。

public class MyPojo {
     private String ABCName;
     public void setABCName(String ABCName) {
         this.ABCName = ABCName;
     }

     @JsonProperty("ABCName") 
public String getABCName() {
         return ABCName;
     }
 }

結果:{"ABCName": "Foo"}

ただし、フィールドに注釈を付けると、重複が発生し、次のことが機能しませんでした。

public class MyPojo {
         @JsonProperty("ABCName") 
         private String ABCName;
         public void setABCName(String ABCName) {
             this.ABCName = ABCName;
         }


    public String getABCName() {
             return ABCName;
         }
     }

結果:{"ABCName": "Foo"、 "abcname": "Foo"}

アノテーションがgetterメソッドの上にあるように見えます。

どうもありがとう。

于 2012-10-22T20:14:34.607 に答える
0

次のようにアノテーションイントロスペクターを設定することで、ジャクソン自体を試すことができます

パブリッククラスTestJackson{

    public static void main(String args[]) throws Exception {

        ObjectMapper mapper = new ObjectMapper();
        AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
        mapper.setAnnotationIntrospector(introspector);
        MyPojo my = new MyPojo();
        my.setABCName("Foo");
        System.out.println(mapper.writeValueAsString(my));

    }

    private static class MyPojo {

        @JsonProperty("ABCName")
        private String ABCName;
        public void setABCName(String ABCName) {
            this.ABCName = ABCName;
        }

        public String getABCName() {
            return ABCName;
        }
    }

}
于 2012-10-30T09:56:41.490 に答える
0

Genson http://code.google.com/p/genson/を試すことができます。次のコードは、期待どおりの結果を生成するはずです。

String json = "{\"ABCName\" : \"foo\"}";
MyPojo my = new MyPojo();
my.setABCName("Foo");

Genson genson = new Genson();
System.out.println(genson.serialize(my));
System.out.println(genson.deserialize(json, MyPojo.class).ABCName);

 public static class MyPojo {
     private String ABCName;
     public void setABCName(String ABCName) {
         this.ABCName = ABCName;
     }

     @JsonProperty("ABCName") public String getABCName() {
         return ABCName;
     }
 }
于 2012-10-22T19:17:12.750 に答える