Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JsonMappingException:无法实例化类型为no single long arg构造函数/工厂方法的值_Java_Json_Jackson_Deserialization_Zk - Fatal编程技术网

Java JsonMappingException:无法实例化类型为no single long arg构造函数/工厂方法的值

Java JsonMappingException:无法实例化类型为no single long arg构造函数/工厂方法的值,java,json,jackson,deserialization,zk,Java,Json,Jackson,Deserialization,Zk,嗨,我在zk框架上尝试将json响应解析为java时出错 这是杰森的答复 {"currentTime":1355390722038,"text":"OK","data":{"limitExceeded":false,"references":{"stops":[],"situations":[],"trips":[],"routes":[],"agencies":[{"id":"AG1","privateService":false,"phone":"","timezone":"Asia/Kua

嗨,我在zk框架上尝试将json响应解析为java时出错

这是杰森的答复

{"currentTime":1355390722038,"text":"OK","data":{"limitExceeded":false,"references":{"stops":[],"situations":[],"trips":[],"routes":[],"agencies":[{"id":"AG1","privateService":false,"phone":"","timezone":"Asia/Kuala_Lumpur","disclaimer":"","name":"Panorama","lang":"en","url":"http://www.allcompanyonline.com/company/33/8/26/62438/PM-Cultural--Tourism-Sdn-Bhd.html"}]},"list":[{"lonSpan":0.1766824722290039,"lon":102.2011971473685,"agencyId":"AG1","lat":2.2659808772471948,"latSpan":0.15555363245723042}]},"code":200,"version":2}
我一直在犯这个错误

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.panorama.tripplan.pojo.Agency_coverage] from Long integral number; no single-long-arg constructor/factory method
下面是根变量的pojo

@JsonRootName(value = "currentTime")
public class Agency_coverage{
private Number code;
private Number currentTime;
private Data data;
private String text;
private Number version;

public Agency_coverage(){}

public Number getCode(){
    return this.code;
}
public void setCode(Number code){
    this.code = code;
}
public Number getCurrentTime(){
    return this.currentTime;
}
public void setCurrentTime(Number currentTime){
    this.currentTime = currentTime;
}
public Data getData(){
    return this.data;
}
public void setData(Data data){
    this.data = data;
}
public String getText(){
    return this.text;
}
public void setText(String text){
    this.text = text;
}
public Number getVersion(){
    return this.version;
}
public void setVersion(Number version){
    this.version = version;
}
下面是我试图调用api并解析响应的代码

java.net.URLConnection connection = new URL(url + "?" + query+ "&" + queryLat+ "&" + queryLon).openConnection();
       connection.setRequestProperty("Accept-Charset", charset);
       if ( connection instanceof HttpURLConnection)
       {
         //Jackson 2.X configuration settings
            mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

            mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
            mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
            mapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true);
            mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

            //Tell Jackson to expect the JSON in PascalCase, instead of camelCase
            mapper.setPropertyNamingStrategy(new PropertyNamingStrategy.PascalCaseStrategy());

          HttpURLConnection httpConnection =(HttpURLConnection) connection;  
        //Make the HTTP request, and deserialize the JSON response into the object

          Agency_coverage agencyData= new Agency_coverage();
          agencyData = mapper.readValue(agenturl, Agency_coverage.class);


          //System.out.println(agencyData.getData().getList().get(0).);
          System.out.println(agencyData.getCurrentTime());
          System.out.println(httpConnection.getResponseCode());

       }

如果您能理解这个问题,请提供帮助。我对java开发有点陌生,我会尽全力解决这个问题。第一件事是删除@aymeric建议的
@JsonRootName(value=“currentTime”)
注释。这个注释告诉Jackson映射器,当您的POJO将这个东西称为“Agency_coverage”时,匹配的JSON对象将把它称为“currentTime”。事实并非如此

现在,撇开这一点不谈,您的JSON应该更像这样:

{"Agency_coverage":{"currentTime":1355390722038,"text":"OK","data":"etc..."}}
这里的不同之处在于,您提供了根元素以供Jackson展开


你现在可以看到杰克逊的错误是什么了。使用您提供的JSON和您使用的注释,它发现
currentTime
是映射到
Agency\u coverage
POJO的JSON元素,但
currentTime
的值是
长的,无法映射。

尝试删除此注释:
@JsonRootName(value=“currentTime”)
您好,如果我删除,我会得到以下错误
JsonMappingException:根名称'currentTime'与[Source:http://localhost:8080/api/where/agencies-with-coverage.json;行:1,列:2]
非常感谢..但我无法更改json,因为它是API的固定输出。我努力解决了这个问题。。。。