Tôi đang làm việc trên một số mã máy chủ, trong đó máy khách gửi yêu cầu dưới dạng JSON. Vấn đề của tôi là, có một số yêu cầu có thể, tất cả thay đổi trong các chi tiết triển khai nhỏ. tôi do đó nghĩ để sử dụng một giao diện yêu cầu, định nghĩa là:Sử dụng Gson với các loại giao diện
public interface Request {
Response process ();
}
Từ đó, tôi thực hiện giao diện trong một lớp có tên LoginRequest
như:
public class LoginRequest implements Request {
private String type = "LOGIN";
private String username;
private String password;
public LoginRequest(String username, String password) {
this.username = username;
this.password = password;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
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;
}
/**
* This method is what actually runs the login process, returning an
* appropriate response depending on the outcome of the process.
*/
@Override
public Response process() {
// TODO: Authenticate the user - Does username/password combo exist
// TODO: If the user details are ok, create the Player and add to list of available players
// TODO: Return a response indicating success or failure of the authentication
return null;
}
@Override
public String toString() {
return "LoginRequest [type=" + type + ", username=" + username
+ ", password=" + password + "]";
}
}
Để làm việc với JSON, tôi đã tạo ra một GsonBuilder
dụ và đăng ký một InstanceCreator
như:
public class LoginRequestCreator implements InstanceCreator<LoginRequest> {
@Override
public LoginRequest createInstance(Type arg0) {
return new LoginRequest("username", "password");
}
}
mà tôi sau đó sử dụng như trong đoạn mã bên dưới:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(LoginRequest.class, new LoginRequestCreator());
Gson parser = builder.create();
Request request = parser.fromJson(completeInput, LoginRequest.class);
System.out.println(request);
và tôi nhận được kết quả mong đợi.
Điều tôi muốn làm là thay thế dòng Request request = parser.fromJson(completeInput, LoginRequest.class);
bằng thứ gì đó tương tự như Request request = parser.fromJson(completeInput, Request.class);
nhưng thực hiện điều đó sẽ không hoạt động, vì Request
là giao diện.
Tôi muốn Gson
trả lại loại yêu cầu thích hợp tùy thuộc vào JSON đã nhận.
Một ví dụ về JSON tôi truyền cho các máy chủ được hiển thị dưới đây:
{
"type":"LOGIN",
"username":"someuser",
"password":"somepass"
}
Nói cách khác, tôi đang tìm kiếm một cách để phân tích yêu cầu (Trong JSON) từ khách hàng và trở về đối tượng của các lớp thực hiện Request
Giao diện
Bạn có thể vui lòng cung cấp các ví dụ khác về các câu trả lời JSON khác nhau mà bạn có thể nhận được từ máy chủ? Bởi vì nếu bạn không có nhiều khả năng và rất khác nhau, có điều bạn có thể làm dễ dàng ... – MikO
Cảm ơn @MiKO cho thông tin bạn nhập. Các yêu cầu có khả năng khác là 'PlayRequest',' LogoutRequest', 'GetPlayersRequest',' JoinGameRequest', 'StartGameRequest' etc ... – fredmanglis
Ý tôi là nếu bạn có thể cung cấp ví dụ về yêu cầu JSON cho ít nhất một trong các loại yêu cầu khác . Ý tôi là, đối với 'LoginRequest' của bạn, bạn có fiels:' type', 'username' và' password', còn các yêu cầu khác thì sao? Họ trông như thế nào? – MikO