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

时间:2017-03-26 07:11:10

标签: spring hibernate spring-boot spring-data spring-data-jpa

我在Spring启动应用程序中遇到了spring数据休息的不同行为 当我从对象存储库类查询时,通过匹配电子邮件ID来检索User对象的自定义查询,并且电子邮件ID是唯一的。我得到空值并且对象存在。 我从邮递员那里调用Rest URI。 --UserRepository

@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);


}

- UserServiceImpl

@Service("userService")
@Transactional
public class UserServiceImpl implements IUserService{

    @Autowired
    private UserRepository userRepository;


    @Override
    public User findByEmail(String email) {
        return userRepository.findByEmail(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);
            }

}

在这方面需要帮助

2 个答案:

答案 0 :(得分:1)

请添加更多详细信息。将项目添加到GitHub或其他东西。您的用户模型如何?您注入服务实现而不是IUserService,这可能是问题所在。

答案 1 :(得分:0)

经过大量的调试后,我终于看到了这个观察结果,即电子邮件ID无法达到控制器映射方法,而对于test@gmail.com,它被读作test @ gmail,并删除了期间和com值,解决方法是更改​​URI映射并在参数末尾添加/,以便更新的URI现在为@RequestMapping(value =“/ user / email / {email} /”,produce = MediaType.APPLICATION_JSON_VALUE)