当我使用 if语句时我的范围有问题...我无法从内部获取值if if 。该对象在消息变量中具有空值。
类
public class UserMessage{
String message;
//Getters and Setters
}
方法
@RequestMapping(value = "/userMessage")
public @ResponseBody UserMessage getMessage(Principal principal){
String username = principal.getName();
UserMessage userMessage = new UserMessage();
if(username.equals("admin")){
//Set value to "message" variable
userMessage.setMessage("Hi admin!")
}
else
if (username.equals("seller")) {
//Set value to "message" variable
userMessage.setMessage("Hi seller!")
}
else
if (username.equals("customer")) {
//Set value to "message" variable
userMessage.setMessage("Hi customer!")
}
// This object has a null value in the message variable.
return userMessage;
}
如何解决此问题?
答案 0 :(得分:1)
你的格式化正在掩盖问题:有些情况username
并不完全等于这些字符串中的任何一个:
"admin"
"seller"
"customer"
原因很简单:您没有else
条件,其中包含长if
条语句。
if (username.equals("admin")) {
//Set value to "message" variable
userMessage.setMessage("Hi admin!")
} else if (username.equals("seller")) {
//Set value to "message" variable
userMessage.setMessage("Hi seller!")
} else if (username.equals("customer")) {
//Set value to "message" variable
userMessage.setMessage("Hi customer!")
}
如果你绝对需要一个值,那么将其设置为合理的默认值;否则,请考虑使equals
语句不区分大小写,如果username
的大写稍微偏离("Admin"
而不是"admin"
等)。
// Also, flip the order of your equals so you don't run into silly NPEs
if("admin".equalsIgnoreCase(username))
将username
的值记录在至少DEBUG或TRACE中是有益的,直到您可以找出为什么值不会以您预期的形式出现。
答案 1 :(得分:0)
尝试添加默认的else子句来解决问题:
else {
userMessage.setMessage("Hi " + username);
}
答案 2 :(得分:0)
这是一个基于您的代码的简单测试应用程序。输出是:
name: admin message: Hi admin!
name: xyzzy message: null
如Makoto's answer所示,如果您使用导致setMessage调用的其中一个用户名值运行if
结构,则会设置该消息,并且从{{}}外部检索它是没有问题的{1}}。如果使用任何其他用户名值运行if结构,则不调用setMessage,并且消息将保留其初始值null。
if