首页 > 解决方案 > TokenEndpoint 中的 NullPointerException

问题描述

LE:我最初认为这与 JPQL 查询有关 - 请参见下文。

我正在努力解决一个问题,我似乎找不到任何解决方案。我正在尝试在数据库中查找用户。搜索条件是用户名或电子邮件地址。用户可能没有用户名,所以我总是NullPointerException在我的CrudRepository. 我已经尝试过 JPQL 和本机查询,但我总是得到相同的结果。

我可以在 MySQL Workbench 中成功运行本机查询 - 在 Java 中它会引发异常。

这是我使用本机查询时的存储库:

@Query(value = "select * from users u where " +
        "(u.username is not null and u.username = :queryString) or " +
        "(u.email_address is not null and u.email_address = :queryString)",
        nativeQuery = true)
Optional<User> findByEmailAddressOrUsername(@Param("queryString") String queryString);

使用 JPQL:

@Query("select u from user u where " +
        "(u.emailAddress is not null and u.emailAddress = ?1) or " +
        "(u.username is not null and u.username = ?1)")
Optional<User> findByEmailAddressOrUsername(String queryString);

有什么建议么?

谢谢一堆。

标签: javaspringjpaspring-datajpql

解决方案


嗯,看来我终于找到了问题所在。这比我预期的要微妙得多。它与 JPQL 或 SQL 查询无关,它们非常好。问题实际上出在我的习惯TokenEnhancer中,我检查了我的UserDetails. 由于getUsername()返回 null (因为某些用户没有用户名,这将触发NullPointerException我之前提到的。


推荐阅读