0

如何告诉杰克逊忽略 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"}

结果是重复的。

我有一个 JSON 客户端,它将发送为:“ABCName”:“Foo”,我需要在 Jackson 中处理它。

有什么解决方法吗?

谢谢你的时间。

4

3 回答 3

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 回答
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 回答