m0_37852925 2018-03-18 14:17 采纳率: 50%
浏览 1565
已采纳

servlet中Gson转换Json数据为对象,获取对象属性时报空指针问题,求解答

服务端获取的json字符串如下:{"name":"王五","course":{"chinese":70,"english":90}};
转化成student对象,代码如下:
package sourceCode;

import java.io.BufferedReader;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

public class TestJson extends HttpServlet{
public void doPost(HttpServletRequest res,HttpServletResponse req) throws IOException{
req.setHeader("Content-Type", "application/json;charset=utf-8");
BufferedReader br = res.getReader();
StringBuffer sb = new StringBuffer();
String str;
while((str=br.readLine())!=null){
sb.append(str);
}
String jsonStr = sb.toString();
System.out.println("sb为:"+jsonStr);
br.close();
Gson gson = new Gson();
Student stu = gson.fromJson(jsonStr, Student.class);
System.out.println(stu.getName);
System.out.println(stu.getCourse().getChinese());
}
}

student和sourse类代码如下:
public class Student {
private String name;
private Course course;

public Student() {
    super();
}

public Student(String name, Course course) {
    super();
    this.name = name;
    this.course = course;
}
//此处省略set和get函数

}

public class Course {

private int chinese;
private int english;

public Course() {
    super();
}

public Course(int chinese, int english) {
    super();
    this.chinese = chinese;
    this.english = english;
}
//此处省略set和get函数

}

当前台发起请求servlet时,控制台打印出的结果如下:
图片说明

  • 写回答

4条回答 默认 最新

  • 一叶龙洲 2018-03-19 05:32
    关注

    亲测,直接使用是没问题的,那就应该是两次提交,第二次字符串为空

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • m0_37852925 2018-03-18 15:17
    关注

    这是前端造成的,请求应该是提了两次造成。

    评论
  • 三阶魔方 2018-03-18 16:14
    关注

    Gson gson = new Gson();
    在这句前面你应该先判断是否为空,空了自然无法处理。
    if("".equals(jsonStr)) return;

    评论
  • baidu_30233079 2018-03-19 00:54
    关注

    前端问题,前端发了两次请求,第二次发过来的数据为空。你的后台要处理一下,如果jsonStr 为空或者是“”,就不要处理

    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 Qt 不小心删除了自带的类,该怎么办
  • ¥15 我需要在PC端 开两个抖店工作台客户端.(语言-java)
  • ¥15 有没有哪位厉害的人可以用C#可视化呀
  • ¥15 可以帮我看看代码哪里错了吗
  • ¥15 设计一个成绩管理系统
  • ¥15 PCL注册的选点等函数如何取消注册
  • ¥15 问一下各位,为什么我用蓝牙直接发送模拟输入的数据,接收端显示乱码呢,米思齐软件上usb串口显示正常的字符串呢?
  • ¥15 Python爬虫程序
  • ¥15 crypto 这种的应该怎么找flag?
  • ¥15 代码已写好,求帮我指出错误,有偿!