2014-10-21 3 views
4

Я пытаюсь проверить простой корпус JSON с помощью Jackson, где я храню запрос JSON как String в переменной 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); 
Смежные вопросы