2013-03-27 61 views
2

我正在尝试使用Object Mapper调用我的REST服务。org.codehaus.jackson.map.JsonMappingException using ObjectMapper

url = new URL("http://phx5qa01c-8539.host.com:8080/bservice/BService/v1/getSimpleString"); 

String str = mapper.readValue(url, String.class); 

该网址将会给我这个字符串后台

{属性:[{纳米: “SELLERS2” VT: “java.util.Map” 状态: “SUCCESS” jsonValue: “{”lv“:[{”v“:{”regSiteId“:null,”userState“:null,”userId“:609},”cn“:1}],”lmd“:20130206211109}” } ]}

当我在浏览器上试图找到这个URL时,我收回了上面的字符串。但只要我在代码中做同样的事情。我得到这个异常如下─

org.codehaus.jackson.map.JsonMappingException:无法反序列化java.lang.String中的 实例出来START_OBJECT令牌

谁能帮我这个为什么我在下面得到这个例外。

回答

2

杰克逊试图反序列化你的json作为一个新的字符串对象,但属性不匹配例如它不能找到一个方法String.setAttributes()。对于任何反序列化错误,“超出START_OBJECT标记”都是一个不容忽视的问题,堆栈跟踪中可能会有更多信息。

尝试:

Map myMap = mapper.readValue(url, Map.class); 

或者,如果你真的想要的字符串,请不要使用杰克逊只是使用标准Java代码或commons-io读取URL字符串:

String str = IOUtils.toString(url); 
+0

感谢您的帮助。当我尝试第一种方法时,我得到这个异常 - java.io.EOFException:由于输入结束而没有内容映射到Object?任何想法为什么它发生? – ferhan 2013-03-27 03:43:25