2016-08-23 21 views
1

火力地堡數據:擷取JSON作爲字符串不使用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: [email protected]; 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; 
    } 
} 
的JSON

出口從火力:

{ 
    "1719126" : { 
    "1719130" : { 
     "1719121" : "{\"testId\":\"1719126\"}" 
    } 
    } 
} 

以下代碼工作細跟上述solutionDto,但是當相同的是使用Apache取從firebase它不起作用

String s = "{\"testId\":\"1719126\"}"; 
objectMapper.readValue(s, SolutionDto.class); 
+1

除了Jordi的回答,沒有更多的我們可以說沒有看到'SolutionDto'。另外請注意,您在問題中包含了JSON樹的圖片。請用實際的JSON替換爲文本,您可以通過點擊Firebase數據庫控制檯中的導出按鈕輕鬆獲取。將JSON作爲文本可以搜索,使我們可以輕鬆使用它來測試您的實際數據,在我們的答案中使用它,並且通常只是一件好事。 –

+0

@FrankvanPuffelen增加了缺失的細節 – Bhuvan

回答

2

當你的例外說.... 無單String構造/工廠方法

您需要提供一個單String構造即:

public SolutionDto(String data) 

或者創建工廠的註解通過@JsonCreator如所述here

+0

請求查看編輯部分...也是在例外打印的JSON看起來對我來說'...從字符串值('{「testId」:「1719126」}');沒有單一的... ... – Bhuvan