例外:"org.codehaus.jackson.map.JsonMappingException:无法从START_OBJECT标记中反序列化java.lang.String的实例"

AKI*_*WEB 5 java json jackson

我正在尝试使用Jackson验证一个简单的JSON主体,我将JSON请求存储为"dataJson"变量中的String.

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);
}
Run Code Online (Sandbox Code Playgroud)

SUtil.toString(InputStream is)方法:

 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();
   }
Run Code Online (Sandbox Code Playgroud)

我正在使用杰克逊学习验证部分,但它会在网上抛出错误/异常

String response = objectMapper.readValue(dataJson, String.class);
Run Code Online (Sandbox Code Playgroud)

以下是我得到的例外 -

Exception: "org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token"
Run Code Online (Sandbox Code Playgroud)

我想知道我做错了什么.任何有关这方面的帮助将不胜感激.

JSON请求:

{"username" : "my_username","password" : "my_password","validation-factors":{"validationFactors":[{"name":"remote_address","value":"127.0.0.1"}]}}
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 10

JSON字符串映射到Java String(反之亦然),但JSON对象不映射到Java String,这是您尝试使用的readValue.

如果您只是尝试验证JSON,请使用类似的东西

objectMapper.readTree(dataJson);
Run Code Online (Sandbox Code Playgroud)

并忽略结果.如果调用失败,则调用将抛出异常.