Nie mam pojęcia jaki jest związek pomiędzy tymi dwoma wariantami jeśli chodzi o wysyłania żądań POST, ale widać coś jest na rzeczy.
Oto moja User class:
public class User {
String name, pass, email;
int level, exp, gold;
Timestamp regDate, lastVisited;
boolean loginStatus;
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean getLoginStatus() {
return loginStatus;
}
public void setLoginStatus(boolean loginStatus) {
this.loginStatus = loginStatus;
}
public Timestamp getLastVisited() {
return lastVisited;
}
public void setLastVisited(Timestamp lastVisited) {
this.lastVisited = lastVisited;
}
public Timestamp getRegDate() {
return regDate;
}
public void setRegDate(Timestamp regDate) {
this.regDate = regDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getExp() {
return exp;
}
public void setExp(int exp) {
this.exp = exp;
}
public int getGold() {
return gold;
}
public void setGold(int gold) {
this.gold = gold;
}
public User(String name, String pass) {
this.name = name;
this.pass = pass;
}
public User(String name, String pass, String email) {
this.name = name;
this.pass = pass;
this.email = email;
}
public User(String name, boolean loginStatus, int level, int exp, int gold, Timestamp regDate, Timestamp lastVisited) {
this.name = name;
this.loginStatus = loginStatus;
this.level = level;
this.exp = exp;
this.gold = gold;
this.regDate = regDate;
this.lastVisited = lastVisited;
}
}
Mam takie żądanie retrofitowe:
@POST("/login")
Call<String> checkLogin(@Body User user);
i takie wywołanie retrofitowe:
@Override
public void checkLogin(final OnFinishedLoginListener onFinishedListener, String login, String passWhenLogin, List<String> usersLoggedOnCredential) {
Call<String> result = Api.getClient().checkLogin(new User(login, passWhenLogin));
result.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
onFinishedListener.onFinishedLogin(response.body());
usersLoggedOnCredential.add(login);
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.e("checkLogin", t.toString());
onFinishedListener.onFailureLogin(t);
}
});
i kod serwera:
@PostMapping("/login")
public String login(@RequestBody UserForCreateDto userForCreateDto) throws SQLException {
return usersDao.userExists(userForCreateDto.getName(), userForCreateDto.getPass(), conn);
}
oraz
public String userExists(String name, String pass, Connection connection) {
String passEncoded = "";
String result;
System.out.println("qqqqqqq " + name + " " + pass);
PasswordEncoder encoder = new BCryptPasswordEncoder();
PreparedStatement ps;
try {
ps = connection.prepareStatement("select * from users where username='" + name + "'");
ResultSet rs = ps.executeQuery();
if (rs.next())
passEncoded = rs.getString(3);
if (encoder.matches(pass, passEncoded))
result = "true";
else
result = "false";
} catch (Exception e) {
System.out.println("aaaaaaaaaab");
e.printStackTrace();
return e.getMessage();
}
return result;
oraz model usera z serwera :
@Data
public class UserForCreateDto {
private String name;
private String pass;
private String email;
private int level;
private int exp;
private int gold;
}
W trybie debugowania otrzymuję odpowiednio true or false w zależności od przekazanych danych logowania, ale kiedy podpiszę swoją aplikację aby była gotowa do Google Play moje pole pass wydaje się nie dochodzić do serwera i otrzymuję wtedy pass == null (pole name jest poprawne).
Czemu tak się dzieje?