我正在尝试使用Jackson验证一个简单的JSON主体,我将JSON请求存储为" dataJson"变量
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 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();
}
我正在使用Jackson学习验证部分,但它会在行上抛出错误/异常
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"}]}}
答案 0 :(得分:10)
JSON字符串映射到Java String
(反之亦然),但JSON对象不映射到Java String
,这是您尝试使用{{1} }。
如果您只是尝试验证JSON,请使用类似
的内容readValue
并忽略结果。如果调用无法解析,则调用将抛出异常。
答案 1 :(得分:2)
将此属性设置为ObjectMapper实例,
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);