首页 > 解决方案 > 在 PutMapping 中获取空指针异常

问题描述

我有 3 个实体用户、角色和书籍都是双向连接的

用户和角色->manytomany joinTable(user_roles)

用户和书籍->manytomany joinTable(book_users)

我希望用户发行一本书意味着只更新可连接(book_users)列

用户控制器

包 com.kk.booklendingapi.booklending1.controller;

@RestController
@RequestMapping("/rest/user")
public class UserController {
    
    
    @Autowired
    private BookRepository bookRepository;
    
    @Autowired
    private UserRepository userRepository;
    
    @GetMapping("/books")
    public List<Book> getBooks(){
        return bookRepository.findAll();
    }
    
    @GetMapping("/books/{bookName}")
    public Book getBooks(@PathVariable String bookName){
        return bookRepository.findByBookName(bookName);
    }
    
    
    //test purpose
    @GetMapping("/users")
    public List<OnlyUsersRequest> getUsers(){
        return userRepository.getOnlyUsers();
    }
    
    @PutMapping("/{userId}")
    public User issueBookByName(@PathVariable int userId,@RequestBody String bookName){
        Optional<User> optionalUser=userRepository.findById(userId);
        User user=optionalUser.get();
        if(user==null) {
            throw new RuntimeException("USer Not Found: "+user);
        }
        System.out.println(user.getUsername());
        System.out.println(bookName+" "+bookName.getClass());
        Book theBook=bookRepository.findByBookName(bookName);
        System.out.println(theBook.getbName());
        
        user.addBook(theBook);
        
        return userRepository.save(user);
    }

}

在 bookrepository 中进行了自定义 jpa 查询,工作正常

@GetMapping("/books/{bookName}")
    public Book getBooks(@PathVariable String bookName){
        return bookRepository.findByBookName(bookName);
    }

那么为什么我在 putMapping 中得到 nullpointerexception

json网址

http://localhost:8484/rest/user/2

json以纯文本形式发送

Angular_Avengers

错误

"java.lang.NullPointerException\r\n\tat com.kk.booklendingapi.booklending1.controller.UserController.issueBookByName(UserController.java:60)\r\n\

标签: jsonspring-bootrestjpa

解决方案


推荐阅读