不合逻辑的空指针异常

时间:2017-08-29 05:24:47

标签: java rest nullpointerexception resteasy

我正在做一个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方法。而且我已经多次检查过某个地方是否存在某个空间。错误出现在这两行代码中,但我不知道发生了什么。

1 个答案:

答案 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);