我正在做一个Rest集成项目,我正在为我正在实现的API尝试PUT api请求。这是PUT操作实现开始时代码的一部分。
String name = vivienda.getName();
Vivienda oldVivienda = repository.getViviendas(name);
if (oldVivienda == null) {
throw new NotFoundException("No se ha encontrado ninguna vivienda con el nombre="+ vivienda.getName());
}
事情是,当我做请求时,它会返回我在那里声明的NotFoundException
,所以它不起作用。
使用我本地化的代码,错误就是,对象oldVivienda
当然是null
,好像我试图用getName
做某事,它会抛出{ {1}}。
但是这里我开始不理解任何事情。我更改了代码以尝试查找错误的位置,直接放置名称字符串:
NullPointerException
这完美无缺。这会导致认为问题出在参数对象Vivienda oldVivienda = repository.getViviendas("vivienda1");
if (oldVivienda == null) {
throw new NotFoundException("No se ha encontrado ninguna vivienda con el nombre="+ vivienda.getName());
}
上,它的名称是空的还是不是“vivienda1”。但是,还记得例外吗?在异常中我使用vivienda
,当我看到响应中抛出的错误时,它实际上是“vivienda1”。所以我发送了很好的对象,当你vivienda.getName()
时,它返回“vivienda1”。当你将字符串“vivienda1”放在vivienda.getName()
中时,它的效果非常好。
那么,问题出在哪里?类型有问题吗?但repository.getViviendas("vivienda1")
是一个返回String的简单get方法。而且我已经多次检查过某个地方是否存在某个空间。错误出现在这两行代码中,但我不知道发生了什么。
答案 0 :(得分:1)
如果此代码有效
repository.getViviendas("vivienda1");
而以下不是
repository.getViviendas(name); // name is "vivienda1"
这可能意味着String
内的repository
比较不正确。
如果您将两个字符串声明为文字,那么使用==
运算符进行比较将会成功,因为它们将存储在字符串池中。但是,如果其中一个字符串的值是动态的(例如来自您的RESTful API客户端),那么它将无法工作。
有关Java中字符串池的更多详细信息,请阅读What is String pool in Java?。
在Java中比较字符串的正确方法是.equals()
方法:
someString.equals(otherString);