基本上我有一个bean类,可以说Emp
class Emp{
private int id;
private String name;
public Emp(int id, String name){
this.id = id;
this.name = name;
}
// Setters and Getters
}
还有另一个包含Emp参考的类
class MyClass{
protected Emp emp;
protected ModelAndView mav;
protected ModelAndView getView(int id, String name){
emp = new Emp(id,name);
mav = new ModelAndView("my-view"); // JSP Page
mav.addObject("emp",emp);
return mav;
}
}
控制器1返回一个视图,并在MyClass中设置 emp 变量的值
@Controller
class Controller1 extends MyClass{
@RequestMapping("/req1")
public ModelAndView view1(){
return getView(1,"John");
}
}
理想情况下,由于已设置 emp 的值,因此它应在控制台中显示“ John”。但是,当我通过第二个控制器进行调用时,我收到了NullPointerException
@Controller
class Controller2 extends MyClass{
@RequestMapping("/req2")
public ModelAndView view2(){
System.out.println(emp.getName()); // -> NullPointerException
return mav;
}
}
此问题背后的可能原因是什么?
答案 0 :(得分:0)
您有两个不同的控制器,每个控制器都扩展MyClass。每个控制器都有自己的Emp实例。因此,尽管您已经调用了'/ req1'并在Controller1中初始化了Emp的值,但Controller2中的Emp值仍未初始化(因此,当您尝试在其上调用NPE时)。
答案 1 :(得分:0)
Cntroller1和controller2没有链接,当您在controller1中初始化emp并调用controller2时,它将是2个不同的请求。这就是为什么您会得到空指针的原因。
您需要将emp设为静态,以保持其价值。