我有一个这样的JPAR存储库
@Repository
public interface RestaurantRepo extends JpaRepository<Restaurant, String> {
Optional<Restaurant> findByName(String name);
Optional<List<Restaurant>> findAllByMerchantId(String merchantId);
}
然后我有一个控制器,用于在其中初始化存储库
@Autowired
RestaurantRepo restaurantRepo;
然后我有一种使用存储库的方法
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN')")
@GetMapping("/disable")
public ResponseEntity<CustomResponse> disableUser(String username, boolean disable) {
Restaurant restaurant = restaurantRepo.findById(username).get();
restaurant.setDisabled(disable);
CustomResponse er = new CustomResponse();
er.setStatus("Successful");
if (disable) {
er.setMessage("Restaurant is disabled");
} else {
er.setMessage("Restaurant is enabled");
}
restaurantRepo.save(restaurant);
return new ResponseEntity<>(er, new HttpHeaders(), HttpStatus.OK);
}
只要我按下此api,它就可以正常工作。 然后我有另一种这样的方法
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN','ROLE_RESTAURANT')")
@GetMapping("/get")
private ResponseEntity<Restaurant> getRestaurant(Principal principal) {
String username = principal.getName();
System.out.println("username "+username); //prints the valid username
System.out.println("RestRepo "+restaurantRepo); //prints null
Restaurant restaurant;
Optional<Restaurant> opt = restaurantRepo.findById(username); //prints Exception here
if (opt.isPresent()) {
restaurant = opt.get();
return new ResponseEntity<>(restaurant, HttpStatus.OK);
} else {
restaurant = new Restaurant();
return new ResponseEntity<>(restaurant, HttpStatus.NOT_FOUND);
}
}
在这里,我在此行Optional<Restaurant> opt = restaurantRepo.findById(username);
用户名是有效的用户名,因此当我打印restaurantRepo
时,我得到null
。
我对为什么变量在一个方法中不为空而在另一方法中为空感到困惑。任何帮助,将不胜感激。谢谢