调用京东API问题

留下您的微笑 2014-04-29 11:06:27
java.lang.NoSuchFieldError: ACCEPT_EMPTY_STRING_AS_NULL_OBJECT
at com.jd.open.api.sdk.internal.parser.JsonParser.<init>(JsonParser.java:24)
at com.jd.open.api.sdk.internal.parser.ParserFactory.<clinit>(ParserFactory.java:12)
at com.jd.open.api.sdk.DefaultJdClient.parse(DefaultJdClient.java:126)
at com.jd.open.api.sdk.DefaultJdClient.execute(DefaultJdClient.java:90)


调用京东api时候的问题,初步判断是jar包冲突
...全文
1078 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
末日哥 2014-04-29
  • 打赏
  • 举报
回复
把jackson-all-1.7.3.jar删掉试试
tony4geek 2014-04-29
  • 打赏
  • 举报
回复
能debug 调试不
留下您的微笑 2014-04-29
  • 打赏
  • 举报
回复
package com.jd.open.api.sdk.internal.parser;

import com.jd.open.api.sdk.JdException;
import com.jd.open.api.sdk.internal.JSON.JSON;
import com.jd.open.api.sdk.internal.util.StringUtil;
import com.jd.open.api.sdk.response.AbstractResponse;
import java.util.Iterator;
import java.util.Map.Entry;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.DeserializationConfig.Feature;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ObjectNode;

public class JsonParser
  implements Parser
{
  private final ObjectMapper mapper = new ObjectMapper();

  public JsonParser()
  {
    this.mapper.getDeserializationConfig().set(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);

    this.mapper.getDeserializationConfig().set(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

    this.mapper.getDeserializationConfig().set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  }

  public <T extends AbstractResponse> T parse(String json, Class<T> responseClass)
    throws JdException
  {
    AbstractResponse response = null;
    try
    {
      if (StringUtil.isEmpty(json)) {
        throw new JdException("response json is empty!");
      }

      response = fromJson(json, responseClass);

      if (response != null)
        response.setMsg(json);
    }
    catch (Exception e) {
      throw new JdException(e);
    }

    return response;
  }

  public <T extends AbstractResponse> T fromJson(String json, Class<T> responseClass) throws Exception
  {
    ObjectNode rootNode = null;
    try {
      rootNode = (ObjectNode)this.mapper.readTree(json);
    } catch (Exception e) {
      rootNode = (ObjectNode)this.mapper.readTree(JSON.toString(JSON.parse(json)));
    }
    String innerJson = ((JsonNode)((Map.Entry)rootNode.getFields().next()).getValue()).toString();
    return ((AbstractResponse)this.mapper.readValue(innerJson, responseClass));
  }
}
tony4geek 2014-04-29
  • 打赏
  • 举报
回复
有源码?看看 DeserializationConfig.Feature.
留下您的微笑 2014-04-29
  • 打赏
  • 举报
回复
他们说没这种问题的啊 京东api源码都看了 this.mapper.getDeserializationConfig().set(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
S117 2014-04-29
  • 打赏
  • 举报
回复
你把异常发给京东的人那,看看他们怎么回答你!
留下您的微笑 2014-04-29
  • 打赏
  • 举报
回复
这京东的api搞死我了,open-api-sdk-2.0.jar、jackson-core-asl-1.8.1.jar、jackson-mapper-asl-1.8.1.jar 这是京东的jar,问了京东的技术他们说没问题的 。 这京东技术jb就是瞎扯
tony4geek 2014-04-29
  • 打赏
  • 举报
回复
反正提示没有这个字段 NoSuchFieldError ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 你问问他们。
tony4geek 2014-04-29
  • 打赏
  • 举报
回复
那么一个个删除测试 估计重复。
留下您的微笑 2014-04-29
  • 打赏
  • 举报
回复
引用 8 楼 fudongrifdr 的回复:
把jackson-all-1.7.3.jar删掉试试
第一次也以为是这个包,但是删了还是没用。 后面为了找出冲突的包,一个个导入结果发现又好了。过几天再试又不行了。 但是可以肯定的是单独只用京东的3个包是没问题的

50,499

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧