Java 对象为空,但应用程序的行为与之类似';不是

Java 对象为空,但应用程序的行为与之类似';不是,java,spring,hibernate,jsp,Java,Spring,Hibernate,Jsp,这是一个简单的SpringMVC应用程序,应该检查数据库中是否有学生。若是这样,应用程序应该加载student.jsp页面,否则应该重定向到addStudent.jsp 我的服务层中有以下内容: Session session = sessionFactory.getCurrentSession(); List studentList = session.createCriteria(Student.class) .add(Restrictions.eq("indexNumber",

这是一个简单的SpringMVC应用程序,应该检查数据库中是否有学生。若是这样,应用程序应该加载student.jsp页面,否则应该重定向到addStudent.jsp

我的服务层中有以下内容:

Session session = sessionFactory.getCurrentSession();

List studentList = session.createCriteria(Student.class)
    .add(Restrictions.eq("indexNumber", indexNum))
    .list();

if(studentList.isEmpty())
    return null;
else {
    Student student = (Student)studentList.get(0);
    return student;
这是我的控制器:

    @RequestMapping(value="/search", method = RequestMethod.POST)
    public String postSearchStudent(@RequestParam(value = "indexNumber") String indexNumber,
                        @ModelAttribute("studentSearchAttribute") Student student) {

        logger.debug("Received request to search for a student");

        studentService.search(indexNumber);

        if (student.equals(null))
            return "redirect:/essays/main/student/add";
        else
            return "student";
    }
但它不能正常工作——即使服务返回null,应用程序的行为也像学生在数据库中一样,并加载student.jsp。谁能解释一下原因吗


indexNumber不是id,只是学生类中的某个唯一字段。

您这样做完全忽略了
studentService
返回的值

studentService.search(indexNumber);
您的
student
变量绑定到Spring创建的对象,并在调用方法时用作参数。这个对象几乎永远不会是空的。自从

student.equals(null);
如果执行正确,将永远不会返回
true
,您的
否则将始终执行

我不知道您想对
student
Model属性做什么,但是获取服务返回的值并使用它

student = studentService(indexNumber);
if (student == null) {
   ...
} else {
    ...
}

在检查null的情况下,也可以尝试==而不是.equals

if (student==null)
    return "redirect:/essays/main/student/add";
else
    return "student";

如果
student
null
student.equals(null)
将抛出
NullPointerException
。请显示完整的
@Controller
处理程序方法。“@SotiriosDelimanolis”这是我的完整的@Controller方法,学生在哪里声明和设置?你不需要像
Student=studentService.search(indexNumber)这样的东西吗
请小心使用
equals
方法检查对象是否为
null
,但请使用操作符
=
.Hmm,因为我没有看到
student
的声明,我只能假设它是实例成员,这意味着您有一个有状态的控制器。这很糟糕。