2014-10-21 110 views
4

我想驗證一個簡單的JSON正文使用傑克遜,我在那裏存儲JSON請求作爲「dataJson」變量中的字符串。例外:「org.codehaus.jackson.map.JsonMappingException:不能反序列化的實例java.lang.String出START_OBJECT令牌」

public void unmarshal(InputStream is) throws Exception { 
// this will contain my actual json string 
    String dataJson= StUtil.toString(is); 
    System.out.println(dataJson); 

    //parse json string  
    String response = objectMapper.readValue(dataJson, String.class); 
    System.out.println(response); 
} 

SUtil.toString(InputStream爲)方法:

public static String toString(final InputStream is) { 
    final BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
    final StringBuffer buffer = new StringBuffer(); 
    try { 
     for (String line; (line = br.readLine()) != null;) { 
      buffer.append(line); 
      } 
     } catch (IOException ioe) { 
     } 
     return buffer.toString(); 
    } 

我使用傑克遜學習驗證的一部分,但它拋出的錯誤/異常上線

String response = objectMapper.readValue(dataJson, String.class); 

及以下是我得到的例外 -

Exception: "org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token" 

我想知道我在做什麼錯。任何幫助,將不勝感激。

JSON請求:

{"username" : "my_username","password" : "my_password","validation-factors":{"validationFactors":[{"name":"remote_address","value":"127.0.0.1"}]}} 

回答

9

JSON字符串映射到Java String(反之亦然),但一個JSON對象不映射到Java String,這正是你正在嘗試做的與readValue

如果你只是想驗證JSON,使用類似

objectMapper.readTree(dataJson); 

而忽略結果。如果調用失敗,調用將會引發異常。

2

設置該屬性ObjectMapper實例作品,

objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 
相關問題