从firebase获取Json作为字符串在java中不起作用
使用rest的Firebase数据: 控制台中的FireBase数据: 从firebase获取数据的Java代码从firebase获取Json作为字符串在java中不起作用,java,json,jackson,firebase-realtime-database,apache-httpclient-4.x,Java,Json,Jackson,Firebase Realtime Database,Apache Httpclient 4.x,使用rest的Firebase数据: 控制台中的FireBase数据: 从firebase获取数据的Java代码 PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(100); cm.setDefaultMaxPerRoute(100); httpClient = HttpClients.custom()
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(100);
httpClient = HttpClients.custom()
.setConnectionManager(cm)
.build();
CloseableHttpResponse response;
try {
String url = "https://testcustom-a1a4d.firebaseio.com/1719126/1719130/1719121.json?auth=myauthId";
HttpGet httpGet = new HttpGet(url);
response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
SolutionDto solutionDto = objectMapper.readValue(entity.getContent(), SolutionDto.class);
System.out.println(solutionDto);
} catch (IOException e) {
log.error("something went wrong while processing requrest to fireBase", e);
}
java中的错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.web.dtos.SolutionDto] from String value ('{"testId":"1719126"}'); no single-String constructor/factory method
at [Source: org.apache.http.conn.EofSensorInputStream@554083; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:757) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:277) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:289) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1133) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:135) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:123) ~[jackson-module-afterburner-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3051) ~[jackson-databind-2.4.3.jar:2.4.3]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2192) ~[jackson-databind-2.4.3.jar:2.4.3]
为什么无法将字符串解析为对象?
编辑:
SolutionDto.java
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
public class SolutionDto {
private Long testId;
public SolutionDto(){}
public SolutionDto(Long testId) {
this.testId = testId;
}
public void setTestId(Long testId) {
this.testId = testId;
}
public Long getTestId() {
return testId;
}
}
从firebase导出Json:
{
"1719126" : {
"1719130" : {
"1719121" : "{\"testId\":\"1719126\"}"
}
}
}
下面的代码可以很好地使用上述solutionDto,但当使用apache从firebase获取时,它就不起作用了
String s = "{\"testId\":\"1719126\"}";
objectMapper.readValue(s, SolutionDto.class);
正如你的例外所说。。。。没有单字符串构造函数/工厂方法 您需要提供一个单字符串构造函数,即:
public SolutionDto(String data)
或者创建一个由
@JsonCreator
注释的工厂,如上所述除了Jordi的答案,没有看到SolutionDto
我们就没有什么可说的了。还请注意,您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库控制台中的导出按钮轻松获得该文本。将JSON作为文本使其可搜索,允许我们轻松使用它来测试您的实际数据,在我们的答案中使用它,通常这是一件好事。@FrankvanPuffelen添加了缺少的详细信息以查看编辑部分。。。另外,在异常中打印的json在我看来是正常的…来自字符串值(“{”testId:“1719126”}”);没有单列Str…。