• jackson学习----解析豆瓣的图书信息


     
    异常一、
    org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.douban.book.Book$Rating]: can not instantiate from JSON object (need to add/enable type information?)
     at [Source: java.io.StringReader@1cbfe9d; line: 1, column: 12] (through reference chain: com.douban.book.Book["rating"])
    	at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:740)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    	at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    	at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
    	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
    	at com.util.HttpIO.doPost(HttpIO.java:33)
    	at com.douban.book.GetBookInfo.main(GetBookInfo.java:11)
    

    在定义Rating内部类的时候没有使用static修饰

    异常二、

    org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "publisher" (Class com.douban.book.Book), not marked as ignorable
     at [Source: java.io.StringReader@1b8f864; line: 1, column: 852] (through reference chain: com.douban.book.Book["publisher"])
    	at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
    	at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
    	at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:649)
    	at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:635)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1355)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:717)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
    	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
    	at com.util.HttpIO.doPost(HttpIO.java:33)
    	at com.douban.book.GetBookInfo.main(GetBookInfo.java:11)
    

    publisher变量没有定义或者定义成private但是没有get set方法

    异常三、

    org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
     at [Source: java.io.StringReader@1112783; line: 1, column: 75] (through reference chain: com.douban.book.Book["author"])
    	at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    	at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:219)
    	at org.codehaus.jackson.map.deser.std.StringDeserializer.deserialize(StringDeserializer.java:44)
    	at org.codehaus.jackson.map.deser.std.StringDeserializer.deserialize(StringDeserializer.java:13)
    	at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    	at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
    	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
    	at com.util.HttpIO.doPost(HttpIO.java:33)
    	at com.douban.book.GetBookInfo.main(GetBookInfo.java:11)
    

    author应该是List<String>类型,定义成了String类型

    ---------------------------------分割线-------------------------------------------------

    重要的几个类:

    解析json方向

    //解析器

    org.codehaus.jackson.map.ObjectMapper;

    //解析配置

    org.codehaus.jackson.map.DeserializationConfig;

    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));

    objectMapper.setDeserializationConfig(objectMapper.getDeserializationConfig().without(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES))

    关于上面这个属性

    关于jackson的DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES

    -------------------------------------------------------------------------------------------------

    注意使用Jackson解析json的一些方法和原则:

    {}全部需要定义成类

    [] 全部需要定义成List<>

    内部类需要定义成static

    所有的key都是value变量名对应

    还有就是一些方法需要学习

    http://itindex.net/detail/51074-java-%E5%88%A9%E7%94%A8-jackson

    http://developers.douban.com/wiki/?title=guide

    com.util.HttpIO类

    package com.util;
    
    import java.io.IOException;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.codehaus.jackson.map.ObjectMapper;
    
    import com.douban.book.Book;
    
    public class HttpIO
    {
        public static void doPost(final String url, final String body)
        {
    
            HttpClient httpclient = new DefaultHttpClient();
            ObjectMapper mapper = new ObjectMapper();
    
            HttpPost post = new HttpPost(url);
            try
            {
                HttpResponse result = httpclient.execute(post);
    
                if (result.getStatusLine().getStatusCode() == 200)
                {
                    String str = EntityUtils.toString(result.getEntity());
                    System.out.println(str);
    
                    Book book = mapper.readValue(str, Book.class);
                    System.out.println(book);
                }
            }
            catch(ClientProtocolException e)
            {
                e.printStackTrace();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    

      

    package com.douban.book;
    
    import com.util.HttpIO;
    
    
    //http://api.douban.com/v2/book/1220562
    public class GetBookInfo
    {
    	public static void main(String[] args)
    	{
    		HttpIO.doPost("http://api.douban.com/v2/book/1220562",null);
    	}
    }
    

      

    package com.douban.book;
    
    import java.util.List;
    
    public class Book
    {
        private String publisher;
    
        public String id;
    
        private String alt;
    
        private Rating rating;
    
        private List<String> author;
    
        private String alt_title;
    
        private Images images;
    
        private String title;
    
        private String mobile_link;
    
        private String summary;
    
        private Attrs attrs;
    
        private List<Tags> tags;
    
        private String subtitle;
    
        private String pubdate;
    
        private String isbn10;
    
        private String isbn13;
    
        private String url;
    
        private String author_intro;
    
        private String price;
    
        private String origin_title;
    
        private String binding;
    
        private String catalog;
    
        private String pages;
    
        private String image;
    
        private List<String> translator;
        
        
    
        public List<String> getTranslator()
        {
            return translator;
        }
    
        public void setTranslator(List<String> translator)
        {
            this.translator = translator;
        }
    
        public String getImage()
        {
            return image;
        }
    
        public void setImage(String image)
        {
            this.image = image;
        }
    
        public Images getImages()
        {
            return images;
        }
    
        public void setImages(Images images)
        {
            this.images = images;
        }
    
        public String getBinding()
        {
            return binding;
        }
    
        public void setBinding(String binding)
        {
            this.binding = binding;
        }
    
        public String getCatalog()
        {
            return catalog;
        }
    
        public void setCatalog(String catalog)
        {
            this.catalog = catalog;
        }
    
        public String getPages()
        {
            return pages;
        }
    
        public void setPages(String pages)
        {
            this.pages = pages;
        }
    
        static class Images
        {
            private String small;
    
            private String large;
    
            private String medium;
    
            public String getSmall()
            {
                return small;
            }
    
            public void setSmall(String small)
            {
                this.small = small;
            }
    
            public String getLarge()
            {
                return large;
            }
    
            public void setLarge(String large)
            {
                this.large = large;
            }
    
            public String getMedium()
            {
                return medium;
            }
    
            public void setMedium(String medium)
            {
                this.medium = medium;
            }
    
        }
    
        public String getOrigin_title()
        {
            return origin_title;
        }
    
        public void setOrigin_title(String origin_title)
        {
            this.origin_title = origin_title;
        }
    
        public Book()
        {
    
        }
    
        public Book(String str)
        {
    
        }
    
        public String getPubdate()
        {
            return pubdate;
        }
    
        public void setPubdate(String pubdate)
        {
            this.pubdate = pubdate;
        }
    
        public String getIsbn10()
        {
            return isbn10;
        }
    
        public void setIsbn10(String isbn10)
        {
            this.isbn10 = isbn10;
        }
    
        public String getIsbn13()
        {
            return isbn13;
        }
    
        public void setIsbn13(String isbn13)
        {
            this.isbn13 = isbn13;
        }
    
        public String getUrl()
        {
            return url;
        }
    
        public void setUrl(String url)
        {
            this.url = url;
        }
    
        public String getAuthor_intro()
        {
            return author_intro;
        }
    
        public void setAuthor_intro(String author_intro)
        {
            this.author_intro = author_intro;
        }
    
        public String getPrice()
        {
            return price;
        }
    
        public void setPrice(String price)
        {
            this.price = price;
        }
    
        public String getSubtitle()
        {
            return subtitle;
        }
    
        public void setSubtitle(String subtitle)
        {
            this.subtitle = subtitle;
        }
    
        public String getAlt()
        {
            return alt;
        }
    
        public void setAlt(String alt)
        {
            this.alt = alt;
        }
    
        public Rating getRating()
        {
            return rating;
        }
    
        public void setRating(Rating rating)
        {
            this.rating = rating;
        }
    
        public List<String> getAuthor()
        {
            return author;
        }
    
        public void setAuthor(List<String> author)
        {
            this.author = author;
        }
    
        public String getAlt_title()
        {
            return alt_title;
        }
    
        public void setAlt_title(String alt_title)
        {
            this.alt_title = alt_title;
        }
    
        public String getTitle()
        {
            return title;
        }
    
        public void setTitle(String title)
        {
            this.title = title;
        }
    
        public String getMobile_link()
        {
            return mobile_link;
        }
    
        public void setMobile_link(String mobile_link)
        {
            this.mobile_link = mobile_link;
        }
    
        public String getSummary()
        {
            return summary;
        }
    
        public void setSummary(String summary)
        {
            this.summary = summary;
        }
    
        public Attrs getAttrs()
        {
            return attrs;
        }
    
        public void setAttrs(Attrs attrs)
        {
            this.attrs = attrs;
        }
    
        public List<Tags> getTags()
        {
            return tags;
        }
    
        public void setTags(List<Tags> tags)
        {
            this.tags = tags;
        }
    
        static private class Tags
        {
            private String count;
    
            private String name;
    
            private String title;
    
            public String getTitle()
            {
                return title;
            }
    
            public void setTitle(String title)
            {
                this.title = title;
            }
    
            public String getCount()
            {
                return count;
            }
    
            public void setCount(String count)
            {
                this.count = count;
            }
    
            public String getName()
            {
                return name;
            }
    
            public void setName(String name)
            {
                this.name = name;
            }
        }
    
        static private class Attrs
        {
            private List<String> publiser;
    
            private List<String> pubdate;
    
            private List<String> author;
    
            private List<String> price;
    
            private List<String> title;
    
            private List<String> binding;
    
            private List<String> translator;
    
            private List<String> pages;
    
            public List<String> getPubliser()
            {
                return publiser;
            }
    
            public void setPubliser(List<String> publiser)
            {
                this.publiser = publiser;
            }
    
            public List<String> getPubdate()
            {
                return pubdate;
            }
    
            public void setPubdate(List<String> pubdate)
            {
                this.pubdate = pubdate;
            }
    
            public List<String> getAuthor()
            {
                return author;
            }
    
            public void setAuthor(List<String> author)
            {
                this.author = author;
            }
    
            public List<String> getPrice()
            {
                return price;
            }
    
            public void setPrice(List<String> price)
            {
                this.price = price;
            }
    
            public List<String> getTitle()
            {
                return title;
            }
    
            public void setTitle(List<String> title)
            {
                this.title = title;
            }
    
            public List<String> getBinding()
            {
                return binding;
            }
    
            public void setBinding(List<String> binding)
            {
                this.binding = binding;
            }
    
            public List<String> getTranslator()
            {
                return translator;
            }
    
            public void setTranslator(List<String> translator)
            {
                this.translator = translator;
            }
    
            public List<String> getPages()
            {
                return pages;
            }
    
            public void setPages(List<String> pages)
            {
                this.pages = pages;
            }
        }
    
        static class Rating
        {
            private int max;
    
            private String average;
    
            private int numRaters;
    
            private int min;
    
            public int getMax()
            {
                return max;
            }
    
            public void setMax(int max)
            {
                this.max = max;
            }
    
            public String getAverage()
            {
                return average;
            }
    
            public void setAverage(String average)
            {
                this.average = average;
            }
    
            public int getNumRaters()
            {
                return numRaters;
            }
    
            public void setNumRaters(int numRaters)
            {
                this.numRaters = numRaters;
            }
    
            public int getMin()
            {
                return min;
            }
    
            public void setMin(int min)
            {
                this.min = min;
            }
    
        }
    
        public String getPublisher()
        {
            return publisher;
        }
    
        public void setPublisher(String publisher)
        {
            this.publisher = publisher;
        }
    
    }
    
    {
        "rating": {
            "max": 10, 
            "numRaters": 345, 
            "average": "7.0", 
            "min": 0
        }, 
        "subtitle": "", 
        "author": [
            "[日] 片山恭一"
        ], 
        "pubdate": "2005-1", 
        "tags": [
            {
                "count": 133, 
                "name": "片山恭一", 
                "title": "片山恭一"
            }, 
            {
                "count": 62, 
                "name": "日本", 
                "title": "日本"
            }, 
            {
                "count": 60, 
                "name": "日本文学", 
                "title": "日本文学"
            }, 
            {
                "count": 38, 
                "name": "小说", 
                "title": "小说"
            }, 
            {
                "count": 32, 
                "name": "满月之夜白鲸现", 
                "title": "满月之夜白鲸现"
            }, 
            {
                "count": 15, 
                "name": "爱情", 
                "title": "爱情"
            }, 
            {
                "count": 8, 
                "name": "純愛", 
                "title": "純愛"
            }, 
            {
                "count": 8, 
                "name": "外国文学", 
                "title": "外国文学"
            }
        ], 
        "origin_title": "", 
        "image": "http://img3.douban.com/mpic/s1747553.jpg", 
        "binding": "平装", 
        "translator": [
            "豫人"
        ], 
        "catalog": "
          ", 
        "pages": "180", 
        "images": {
            "small": "http://img3.douban.com/spic/s1747553.jpg", 
            "large": "http://img3.douban.com/lpic/s1747553.jpg", 
            "medium": "http://img3.douban.com/mpic/s1747553.jpg"
        }, 
        "alt": "http://book.douban.com/subject/1220562/", 
        "id": "1220562", 
        "publisher": "青岛出版社", 
        "isbn10": "7543632608", 
        "isbn13": "9787543632608", 
        "title": "满月之夜白鲸现", 
        "url": "http://api.douban.com/v2/book/1220562", 
        "alt_title": "", 
        "author_intro": "", 
        "summary": "那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。", 
        "price": "15.00元"
    }

    对于Book类当中的Bean变量 可以定义成private的 然后赋予get set方法,也可以直接定义成public的

  • 相关阅读:
    缅怀我的第一台平板——Surface RT
    【万里征程——Windows App开发】DatePicker&Timepicker
    【万里征程——Windows App开发】用浮出控件做预览效果
    【万里征程——Windows App开发】应用栏
    【万里征程——Windows App开发】画笔和图像
    【万里征程——Windows App开发】绘制图形
    稻香
    【万里征程——Windows App开发】动画1
    【SICP练习】152 练习4.8
    【SICP练习】151 练习4.7
  • 原文地址:https://www.cnblogs.com/wuxinliulei/p/4912824.html
Copyright © 2020-2023  润新知