Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring boot rest JPA查询通过电子邮件在查询时返回空对象_Spring_Hibernate_Spring Boot_Spring Data_Spring Data Jpa - Fatal编程技术网

spring boot rest JPA查询通过电子邮件在查询时返回空对象

spring boot rest JPA查询通过电子邮件在查询时返回空对象,spring,hibernate,spring-boot,spring-data,spring-data-jpa,Spring,Hibernate,Spring Boot,Spring Data,Spring Data Jpa,我在SpringBoot应用程序中遇到了SpringDataREST的不同行为 当我从object repository类进行查询时,使用自定义查询通过匹配电子邮件id检索用户对象,并且电子邮件id是唯一的。我得到空值,并且对象存在。 我正在给邮递员打电话。 --用户存储库 @Repository @Transactional public interface UserRepository extends JpaRepository<User, Long> { @

我在SpringBoot应用程序中遇到了SpringDataREST的不同行为 当我从object repository类进行查询时,使用自定义查询通过匹配电子邮件id检索用户对象,并且电子邮件id是唯一的。我得到空值,并且对象存在。 我正在给邮递员打电话。 --用户存储库

@Repository
@Transactional
public interface UserRepository extends  JpaRepository<User, Long> {    

    @Query(value ="select u from User u where u.email = :email")
    User findByEmail(@Param("email") String email);


}
--控制器

@RestController
@RequestMapping("/api")
public class UserControllerRest {

@Autowired(required = true)
UserServiceImpl userService;    
@RequestMapping(value = "/user/email/{email}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
            public ResponseEntity<User> getUserByEmail(@PathVariable("email") String email) {
                System.out.println("Fetching User with id " + email);
                User user = userService.findByEmail(email);
                if (user == null) {
                    System.out.println("User with email " + email + " not found");
                    return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
                }
                return new ResponseEntity<User>(user, HttpStatus.OK);
            }

}
@RestController
@请求映射(“/api”)
公共类UserControllerTest{
@自动连线(必需=真)
UserServiceImpl用户服务;
@RequestMapping(value=“/user/email/{email}”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
public ResponseEntity getUserByEmail(@PathVariable(“电子邮件”)字符串电子邮件){
System.out.println(“获取id为“+电子邮件的用户”);
User=userService.findByEmail(电子邮件);
if(user==null){
System.out.println(“有电子邮件的用户”+电子邮件+“未找到”);
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}
返回新的响应属性(用户,HttpStatus.OK);
}
}

这方面需要帮助

请添加更多详细信息。将项目添加到GitHub或其他内容。您的用户模型是什么样子的?您注入了服务实现而不是IUserService,可能这就是问题所在。

请添加更多详细信息。将项目添加到GitHub或其他内容。您的用户模型是什么样子的?您注入了服务实现而不是IUserService,也许这就是问题所在。

经过大量调试后,我最终发现电子邮件id无法到达控制器映射的方法和test@gmail.com,读作test@gmail期间和com值被删除,解决方法是更改URI映射并在参数末尾添加/,这样更新的URI现在是
@RequestMapping(value=“/user/email/{email}/”,products=MediaType.APPLICATION_JSON_value)

经过大量调试后,我最终发现电子邮件id无法到达控制器映射的方法和test@gmail.com,读作test@gmail期间和com值被删除,解决方法是更改URI映射并在参数末尾添加/,因此更新后的URI现在是
@RequestMapping(value=“/user/email/{email}/”,products=MediaType.APPLICATION\u JSON\u value)

我们如何帮助?您只需要开始调试:您传递给查询的电子邮件是否是您认为的电子邮件(没有尾随或前导空格等)?该电子邮件是否确实存在于表中?插入它的事务是否已提交?你确定应用程序使用了你认为它正在使用的数据库或模式吗?它是否适用于其他现有电子邮件?在代码中添加跟踪。使用调试器。我们在这里无能为力。是的,db中存在电子邮件,我也使用trim进行检查,当我尝试获取对象列表时,它会向我显示具有电子邮件id的特定对象,但当我尝试作为单个对象检索时,我无法获取它。我已使用sql查询中的类似条件进行检查,它返回数据,这可能是前导空格的问题@查询(value=“select firstName,lastName from User u,其中u.email like%:email%”),但不要求使用like条件,因为它将返回对象列表。如果我在此处添加要忽略的前导空格检查,我尝试修剪电子邮件的参数字符串,但在处理User=userService.findByEmail时它通过异常(email.toString().trim()例外:“java.lang.IllegalArgumentException:参数绑定的名称不能为null或空!对于命名参数,您需要在java版本<8的查询方法参数中使用@Param。需要明确的是:如果您只是将方法签名更改为
List findByEmail(@Param(”电子邮件“)字符串电子邮件)
。如果没有,您是否在修剪后使用不同的电子邮件地址进行了尝试。我们如何提供帮助?您只需要开始调试:您传递给查询的电子邮件是否是您认为的电子邮件(没有尾随或前导空格等)?该电子邮件是否确实存在于表中?插入该电子邮件的事务是否已提交?您确定该应用程序使用了您认为它正在使用的数据库或架构吗?它是否适用于其他现有电子邮件?在代码中添加跟踪。使用您的调试器。我们在这里无能为力。是的,电子邮件存在于db中,当我尝试获取时,我还会使用trim进行检查对象列表,它向我显示具有电子邮件id的特定对象,但当我尝试作为单个对象检索时,我无法获取该对象。我在sql查询中使用like条件进行了检查,它返回数据,这可能是前导空格的问题。@query(value=“select firstName,lastName from User u where u.email like%:email%”),但使用like条件不是必需的,因为它将返回对象列表。如果我在此处添加要忽略的前导空格检查,我尝试修剪电子邮件的param字符串,但在处理user=userService.findByEmail(email.toString().trim(),例外情况为:java.lang.IllegalArgumentException:参数绑定的名称不能为null或空!对于命名参数,您需要在java版本<8的查询方法参数中使用@Param。需要澄清的是:如果您只是将方法签名更改为
List findByEmail(@Param(“email”)字符串email),一切正常吗
。如果没有,您是否在修剪邮件地址后使用不同的电子邮件地址进行了尝试。我有固定的服务注入,通过将服务实现替换为IUserService我有固定的服务注入,通过将服务实现替换为IUserService
@RestController
@RequestMapping("/api")
public class UserControllerRest {

@Autowired(required = true)
UserServiceImpl userService;    
@RequestMapping(value = "/user/email/{email}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
            public ResponseEntity<User> getUserByEmail(@PathVariable("email") String email) {
                System.out.println("Fetching User with id " + email);
                User user = userService.findByEmail(email);
                if (user == null) {
                    System.out.println("User with email " + email + " not found");
                    return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
                }
                return new ResponseEntity<User>(user, HttpStatus.OK);
            }

}