クライアントがJSONの形式でリクエストを送信するサーバーコードを作成しています。私の問題は、いくつかの可能な要求があり、すべて小さな実装の詳細が異なることです。 私はそのためリクエストインターフェイスを使用することを考え、次のように定義される。示すように、そこからGsonをインターフェイスタイプで使用する
public interface Request {
Response process ();
}
、私はLoginRequest
という名前のクラスでインターフェイスを実装:
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 + "]";
}
}
JSONを操作するには、私が作成しましたGsonBuilder
インスタンスは、図示のようにInstanceCreator
登録:私は、使用に示すよう
public class LoginRequestCreator implements InstanceCreator<LoginRequest> {
@Override
public LoginRequest createInstance(Type arg0) {
return new LoginRequest("username", "password");
}
}
次のスニペット:
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);
と期待される出力が得られます。
私がしたいのはという行をRequest request = parser.fromJson(completeInput, Request.class);
と似たものに置き換えることですが、それは動作しません。Request
はインターフェイスなので、これは動作しません。
受信したJSONに応じて、Gson
に適切なタイプのリクエストを返すようにします。私は、サーバーに渡されたJSONの例を以下に示し
:繰り返しに
{
"type":"LOGIN",
"username":"someuser",
"password":"somepass"
}
、私はクライアントから(JSONで)要求を解析し、実装するクラスのオブジェクトを返す方法を探していますRequest
インターフェイス
サーバーから取得できるさまざまなJSONレスポンスの他の例を教えてください。なぜなら、あなたは多くの非常に異なる可能性を持っていないと、あなたが簡単にできることがあるからです。 – MikO
あなたの入力に感謝@MiKO。他の可能性のあるリクエストは 'PlayRequest'、' LogoutRequest'、 'GetPlayersRequest'、' JoinGameRequest'、 'StartGameRequest'などです... – fredmanglis
あなたは、他のタイプのリクエストの少なくとも1つに対してJSONリクエストの例を提供できる。私はあなたの 'LoginRequest'に対して' type'、 'username'と' password'を持っています。他のリクエストはどうですか?彼らはどのように見えるのですか? – MikO