Jackson JAR接口ObjectMapper.readValue()读不到值

移动开发 码拜 7年前 (2017-04-19) 2826次浏览
大家好!
一个简单例子的Android登陆界面的,后台是一个servlet web进程,提供了doGet和doPost方法,doGet已经将处理了Get方法并将获取到的user类以JSON格式发送出去了,下面是doGet的发送代码:

if(name.equals(user.getName()) && password.equals(user.getPassword()))
			{
				ObjectMapper om = new ObjectMapper();
				om.writeValue(response.getOutputStream(), user);
				System.out.println(user.toString());
				return;
			}

但是android侧在连接建立之后,用readValue接口却收不到报文,程序打印到readValue这行代码的上方就停止了,不往下面执行了,也没异常出来:

if(conn.getResponseCode() != 200){
								Log.i("main","连接服务器失败");
								return ;
							}
							Log.i("main",Inputstr2Str_ByteArrayOutputStream(conn.getInputStream(),null));/*能打印出来并正常*/
							try{
							ObjectMapper om = new ObjectMapper();
							User user = om.readValue(conn.getInputStream(),User.class);
                                                        Log.i("main",user.toString()); /*这一句没走到*/

上面对conn.getInputStream()流的打印都出来了,是正常的JSON格式的报文,没看出异常,大家帮看看问题是在哪里?谢了!
Serlvet的doGet方法中的,user.toString() 打印出来的log:
User [name=zhanghua, sex=男, age=31, password=54321, getName()=zhanghua, getSex()=男, getAge()=31, getPassword()=54321, toString()=com.sxt.day06.entity.User@c389f2]
android侧连接后将conn.getInputStream()流打印出来:
11-27 10:56:01.476: I/main(1647): {“name”:”zhanghua”,”sex”:”男”,”age”:31,”password”:”54321″}
PS: 用的jackson的JAR包是jackson-core-asl-1.9.13.jar / jackson-mapper-asl-1.9.13.jar, SDK是4.4.2,  POS报文都获取正常,不知道为啥GET到的JSON包不能读取。

解决方案

40

引用:

帮看下,本人的完整代码是这样的:

public void run(){
						String name = metname.getText().toString();
						String pwd = metpassword.getText().toString();
						Log.i("main",name);
						Log.i("main",pwd);
						StringBuilder sb = new StringBuilder(PATH);
						sb.append("?name=").append(name).append("&password=").append(pwd);
						try{
							URL url = new URL(sb.toString());
							Log.i("main",sb.toString());
							HttpURLConnection conn = (HttpURLConnection)url.openConnection();
							conn.setConnectTimeout(5000);
							conn.setReadTimeout(5000);
							conn.setRequestMethod("GET");
							Log.i("main","here");
							if(conn.getResponseCode() != 200){
								Log.i("main","连接服务器失败");
								return ;
							}
							Log.i("main",Inputstr2Str_ByteArrayOutputStream(conn.getInputStream(),null));
							//Log.i("main",conn.getInputStream().toString());

							ObjectMapper om = new ObjectMapper();
							om.enableDefaultTyping();
							User user = om.readValue(conn.getInputStream(),User.class);

							Log.i("main",user.toString());
							Log.i("main","登陆成功");
						}catch(MalformedURLException ex){
							ex.printStackTrace();
						}catch(IOException ex){
							ex.printStackTrace();
						}
Quote: 引用:
Quote: 引用:
Quote: 引用:

你这下面一句没走,肯定进入到异常捕捉块了,你看下catch到了什么异常

关键是也没异常报出来。console输出的打印就到这一句以前就停止了。

你catch 里面是不是空着的,什么都没做

 Log.i("main",Inputstr2Str_ByteArrayOutputStream(conn.getInputStream(),null));

这句注销掉看看,你这句把内容读完了,后面再读就读不到了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Jackson JAR接口ObjectMapper.readValue()读不到值
喜欢 (0)
[1034331897@qq.com]
分享 (0)