前端向后端传空数据,后端判断是否为空字符串,不要用双等号==。

今天在做一个Dubbo练习中,发现了一个问题,controller层和service层数据判断不一致,直接上代码:

provider中service层方法:

public String dataTest(Student student){
        String str="\n service层数据测试:";
        str += "\nStuName是否为空字符串(==):"+(student.getName()=="");
        str += "\nStuName是否为空字符串(equals):"+(student.getName().equals(""));
        str +="\nStuName是否为空:"+(student.getName().isEmpty());
        str +="\nStuName是否为null:"+(student.getName()==null);
        return str;
    }

consumer中controller层方法:

  @RequestMapping("/dataTest")
    @ResponseBody
    public String dataTest(Student student){
        String str="\n Controller层数据测试:";
        str += "\nStuName是否为空字符串(==):"+(student.getName()=="");
        str += "\nStuName是否为空字符串(equals):"+(student.getName().equals(""));
        str +="\nStuName是否为空:"+(student.getName().isEmpty());
        str +="\nStuName是否为null:"+(student.getName()==null);
        str += studentService.dataTest(student);
        return str;
    }

前端使用ajax传数据:




    
    demo01
    
    


        学生姓名:


测试结果:

前端向后端传空数据,后端判断是否为空字符串,不要用双等号==。_第1张图片

用户输入空格的时候没有问题,如果什么也不输入,提交到后端service层使用双等号判断是否为空字符串的时候就会出和controller层中不一致。

/**
 *
 *  (student.getName() == "")
 * controller层为true
 * service层为false
 */



大家在做非空判断的时候还是先判断是否为null,然后在使用length() 或者equals()或者isEmpty()判断吧。

        

你可能感兴趣的:(前端,javascript,java,ajax,springboot)