Reputation: 703
Please take a look at the following example:
public interface ILoginResource {
@Post
public void login(String username, String password);
}
public class LoginServerResource extends ServerResource implements ILoginResource {
@Override
public void login(String username, String password) {
System.out.println("username = " + username);
System.out.println("password = " + password);
}
}
public static void main(String[] args) {
ClientResource loginResource = new ClientResource(url);
ILoginResource res = loginResource.wrap(ILoginResource.class);
res.login("TestUser","TestPassword");
}
Output is:
username = TestPassword
password = null
What am I doing wrong? Or is it not possible to use multiple parameters?
Upvotes: 0
Views: 586
Reputation: 3417
As you expected, it is indeed not possible to pass multiple arguments in a single call, instead, you can introduce a message class like this:
public class LoginRequest {
private String username;
private String password;
/**
* For deserialization.
*/
public LoginRequest() {
}
/**
* @param username
* The user's name
* @param password
* The password
*/
public LoginRequest(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginRequest [username=" + username + ", password=" + password + "]";
}
}
And modify your resource like this:
public interface ILoginResource {
@Post
public void login(LoginRequest req);
}
Upvotes: 1