Всем привет. Решил написать простенького telegram бота на Spring Boot + MySQL. И наткнулся на проблему. Не могу сохранить обект User в базу. Каждый раз ловлю NullPointerException. Смотрел примеры написания бота на нашем любимом сайте, и там такой проблемы нету. Заранее спасибо!
package telbot;
import entity.User;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import service.ServiceOfferImp;
import service.ServiceUserImpl;
@Component
public class TelegramBotApp extends TelegramLongPollingBot {
ServiceOfferImp serviceOfferImp;
ServiceUserImpl serviceUser;
User user;
@Value("${bot.username}")
private String username;
@Value("${bot.token}")
private String token;
public User getUser() {
return user;
}
@Override
public String getBotUsername() {
return username;
}
@Override
public String getBotToken() {
return token;
}
@Override
public void onUpdateReceived(Update update) {
if(update.hasMessage() && update.getMessage().hasText()) {
String message = update.getMessage().getText().trim();
String chatId = update.getMessage().getChatId().toString();
String userName = update.getMessage().getFrom().getUserName();
SendMessage sm = new SendMessage();
sm.setChatId(chatId);
sm.setText(message);
try {
execute(sm);
// serviceUser.saveUser(new User(username));
user.setUsername(username);
serviceUser.saveUser(user);
System.out.println("Done !!!");
}catch (TelegramApiException e) {
// todo add logging to the project.
e.printStackTrace();
}
}
}
}
package entity;
import javax.persistence.*;
@Entity
@Table(name = "users2")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "username")
private String username;
public User() {
}
public User(String username) {
this.username = username;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
'}';
}
}
package repository;
import entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface UserRepository extends JpaRepository<User, Integer> {
Optional<User> getByUsername(String username);
}
package service;
import entity.User;
public interface ServiceUser {
void saveUser(User user);
User getUserByNickName(String nickName);
}
package service;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import repository.UserRepository;
import java.util.Optional;
@Service
public class ServiceUserImpl implements ServiceUser{
@Autowired
UserRepository userRepository;
@Override
public void saveUser(User user) {
userRepository.save(user);
}
@Override
public User getUserByNickName(String nickName) {
User user = null;
Optional<User> optionalUser = userRepository.getByUsername(nickName);
if (optionalUser.isPresent()){
user = optionalUser.get();
}
return user;
}
}