Исключение нулевого указателя Java в REST API - PullRequest
0 голосов
/ 03 июля 2018

Я на самом деле использую почтальон для отправки запроса на вход в мой REST API, но это дает мне исключение javaNullpointer. Это потому, что в классе модели одна из моих переменных не получает значения. setPhone_Number() функция не вызывается в моем модельном классе. Таким образом, переменная phone_number пуста.

Помощь приветствуется.

Вот мой скриншот ошибки Ошибка затмения для нулевого указателя вот что я посылаю через почтальона почтальон

вот класс входа в систему дао.

 public class LoginDao {

 private String password;
 private String phone_number;


    public LoginDao(){
        phone_number = null;
        password = null;
    }

    public Response doLogin(login logg, String user_type) throws SQLException{
        ResultSet rs = null;
        boolean userType = true;        
        //if userType is resource then boolean is false, if userType is user then boolean is true.
        //logg.setPhone_Number(phone_number);

        DBConnection dbConnection = new DBConnection();
        //Connection connection = dbConnection.getConnection();
        this.phone_number = logg.getPhone_Number();
        this.password = logg.getPassword();


        try{
            if(user_type.equalsIgnoreCase("Rider")) {
                rs = dbConnection.runSql("select rider_id, phone_number, password from rider");
                userType = true;

            }
            else if(user_type.equalsIgnoreCase("Driver")) {
                rs = dbConnection.runSql("select driver_id, phone_number, password from driver");   
                userType = false;
            }

            while(rs.next()){
                System.out.println(phone_number);
                System.out.println(rs.getString("phone_number"));
                System.out.println("user"+user_type);

                if((this.phone_number.equals(rs.getString("phone_number"))) && (this.password.equals(rs.getString("password")))){

Вот логин класса модели

 public class login {

private String phone_number;
private String password;

public login(){

}

public String getPhone_Number() {

    System.out.println("getting "+phone_number);
    return phone_number;
}

public void setPhone_Number(String phone_number) {

    System.out.println("seting "+phone_number);
    this.phone_number = phone_number;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {

    System.out.println("seting "+password);
    this.password = password;
}

}

Вот loginResource.java

 import javax.ws.rs.POST;

 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;

 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;

 import java.sql.SQLException;

  import javax.ws.rs.Consumes;

  import io.github.yasirfaisal21.schoolvan.schoolvan.dao.LoginDao;
 import io.github.yasirfaisal21.schoolvan.schoolvan.model.login;

  @Path("login")


 public class loginResource {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@POST
public Response doLogin(login log,@QueryParam("user_type") String user_type ) 
        throws SQLException{


LoginDao loginDao = new LoginDao();
if(user_type.equalsIgnoreCase("Rider"))
        return loginDao.doLogin(log,"Rider");
else
    return loginDao.doLogin(log,"Driver");
 }

}

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

В вашем login.java классе замените:

private String phone_number;
с
private String phoneNumber;

и обновите свои методы получения и установки следующим образом:

public String getPhoneNumber() {
    return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}   
0 голосов
/ 03 июля 2018

В loginResource.java, линия

LoginDao loginDao = new LoginDao();

вызывает этот метод в LoginDao:

public LoginDao(){
        phone_number = null;
        password = null;
    }

где вы явно задали phone_number = null

теперь в строке 52 из LoginDao

if((this.phone_number.equals(rs.getString("phone_number"))) && (this.password.equals(rs.getString("password"))))

this.phone_number соответствует объекту LoginDao, который был построен последним, для которого phone_number имеет значение null. Даже до того, как значения можно сравнить с rs, функция equals завершается ошибкой, и вы получаете исключение null pointer.

Вместо этого вы должны принять значения phone_number и password из запроса. Попробуйте создать параметризованный конструктор и присвоить им передаваемые вами значения, например:

public LoginDao(String number, String password){
         this.phone_number = number;
         this.password = password;
}

и вызывать его с loginResource примерно так:

if(user_type.equalsIgnoreCase("Rider"))
        return new loginDao(number,password).doLogin(log,"Rider");
else
    return new loginDao(number,password).doLogin(log,"Driver");
 }

В качестве альтернативы Я думаю, что вы пытаетесь сохранить параметры в Login объекте, но вы нигде не делали этого в loginResource. Вы должны изменить свой конструктор в loginDao на

public loginDao() { }

и напишите следующее в loginResource:

Login login = new Login();
if(user_type.equalsIgnoreCase("Rider")){
       login.setPhone_number("your phone number from request");
        return loginDao.doLogin(log,"Rider");
 }
else
  {
   login.setPhone_number("your phone number from request");
  return loginDao.doLogin(log,"Driver");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...