首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反序列化问题

反序列化问题
EN

Stack Overflow用户
提问于 2013-12-08 16:50:07
回答 1查看 1.3K关注 0票数 0

我试图从Nutritionix反序列化JSON响应。当我试图反序列化对象时,我一直得到一个HTTP 500 --请求处理失败;嵌套的异常是java.lang.ClassCastException: java.lang.String不能转换为java.util.Map错误。我非常困惑,也不知道为什么这会不断发生,因为is似乎得到了一个有效的JSON响应,但我不确定。

代码语言:javascript
复制
public class CallSearch {

    String value;

    public CallSearch(String search){
        value = search.replace(" ", "%20");
    }
    public FullResponse search() throws ClientProtocolException, IOException{

        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet getProducts = new HttpGet("https://api.nutritionix.com/v1_1/search/"+ value +"?results=0%3A6&cal_min=0&cal_max=50000&fields=item_name%2Citem_id&appId=ac23ceb3&appKey=e2b579c55b4857157fc6045d6296b532");
        CloseableHttpResponse productResponse = client.execute(getProducts);
        String entityString = EntityUtils.toString(productResponse.getEntity());
        FullResponse test = new JSONDeserializer<FullResponse>().deserialize(entityString,FullResponse.class);

        return test;
    }
}

我创建的反序列化类如下所示

代码语言:javascript
复制
public class FullResponse {

    String total_hits;
    String max_score;
    List<Hits> hits;

    public FullResponse(){

    }

    public String getTotal_hits() {
        return total_hits;
    }

    public void setTotal_hits(String total_hits) {
        this.total_hits = total_hits;
    }

    public String getMax_score() {
        return max_score;
    }

    public void setMax_score(String max_score) {
        this.max_score = max_score;
    }

    public List<Hits> getHits() {
        return hits;
    }

    public void setHits(List<Hits> hits) {
        this.hits = hits;
    }

Hits类,它是完整响应中的列表

代码语言:javascript
复制
public class Hits {

       String _index;
       String _type;
       String _id;
       String _score;
       List<Fields> fields;

       public Hits(){

       }

        public String get_index() {
        return _index;
    }

    public void set_index(String _index) {
        this._index = _index;
    }

    public String get_type() {
        return _type;
    }

    public void set_type(String _type) {
        this._type = _type;
    }

    public String get_id() {
        return _id;
    }

    public void set_id(String _id) {
        this._id = _id;
    }

    public String get_score() {
        return _score;
    }

    public void set_score(String _score) {
        this._score = _score;
    }

    public List<Fields> getFields() {
        return fields;
    }

    public void setFields(List<Fields> fields) {
        this.fields = fields;
    }
}

最后是Field类:

代码语言:javascript
复制
public class Fields {

    String item_name;

    public Fields(){

    }

    public String getField(){
        return item_name;
    }
    public void setField(String name){
        item_name=name;
    }
}

对我可能出错的地方有任何帮助,我将不胜感激。谢谢

好的,我做了修改,下面是我得到的JSON响应

{ "total_hits":11025,"max_score":11.122117,“点击”:{"_index":"nixproductionv13",“_type”:“项目”,"_id":"513fceb375b8dbbc210000e4","_score":11.122117,“字段”:{“item_name”:“整体牛奶-1 tbsp"}},{ "_index":"nixproductionv13",”_type“:”项目“,”_id“:”513fceb375b8b8dbb2100017b“,”_score“:”_score“:10.703835,“字段”:{“item_name”:“2%牛奶-1杯”},{"_index":"nixproductionv13",“_type”:“项目”,"_id":"513fceb375b8dbbc210000f3","_score":10.7038355,“字段”:{“item_name”:“1%牛奶-1杯”},{"_index":"nixproductionv13",“_type”:“项目”,“_id”:“513fceb375b8b8b8bbc210000fb”,"_score":10.689078,“字段”:{“item_name”:“浏览牛奶-1杯”},{"_index":"nixproductionv13",“_type”:“项目”,"_id":"513fceb375b8dbbc210000e3","_score":10.65872,“字段”:{“item_name”:“整体牛奶-1 fl oz"}},{"_index":"nixproductionv13",”_type“:”项目“,”_id“:”513fceb375b8b8b8dbbc2100017a“,"_score":10.392,“字段”:{“item_name”:“2%牛奶-1夸脱”}}

它现在导致嵌套的异常是java.lang.IllegalArgumentException:参数类型不匹配

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-08 17:17:47

这不能解决所有问题,但它将使我们走上正确的轨道

代码语言:javascript
复制
String entityString = productResponse.getEntity().toString();

应该是

代码语言:javascript
复制
String entityString = EntityUtils.toString(productResponse.getEntity());

EntityUtils.toString()状态的javadoc

读取实体的内容,并将其作为字符串返回。内容使用实体中的字符集(如果有的话)进行转换,如果没有,则使用"ISO-8859-1“。

当你做的时候

代码语言:javascript
复制
productResponse.getEntity().toString();

您正在调用Object类的Object方法,ResponseEntityWrapper继承该方法。它只是返回Stringorg.apache.http.impl.execchain.ResponseEntityWrapper@8f6b087,它根本不是您的HTTP的主体。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20456004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档