Ich arbeite an einigen Server-Code, wo der Client Anforderungen in Form von JSON sendet. Mein Problem ist, dass es eine Anzahl von möglichen Anfragen gibt, die alle in kleinen Implementierungsdetails variieren. ich daher gedacht, um eine Anfrage-Schnittstelle zu verwenden, wie folgt definiert:Verwenden von Gson mit Interface-Typen
public interface Request {
Response process ();
}
Von dort habe ich die Schnittstelle in einer Klasse implementiert namens LoginRequest
wie gezeigt:
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 + "]";
}
}
mit JSON zu arbeiten, habe ich eine GsonBuilder
Instanz und registriert eine InstanceCreator
wie gezeigt:
public class LoginRequestCreator implements InstanceCreator<LoginRequest> {
@Override
public LoginRequest createInstance(Type arg0) {
return new LoginRequest("username", "password");
}
}
die ich dann verwendet, wie in das schnipsel unten:
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);
und ich bekomme die erwartete Ausgabe.
Das, was ich tun möchte, ist die Linie Request request = parser.fromJson(completeInput, LoginRequest.class);
mit etwas Ähnliches wie Request request = parser.fromJson(completeInput, Request.class);
zu ersetzen, sondern tun, das wird nicht funktionieren, da Request
eine Schnittstelle ist.
Ich möchte meine Gson
den entsprechenden Typ der Anfrage abhängig von der empfangenen JSON zurückgeben.
{
"type":"LOGIN",
"username":"someuser",
"password":"somepass"
}
Um es zu wiederholen, für eine Art und Weise Anfragen zu analysieren (In JSON) Umsetzung Suche von Kunden und die Rück Objekte der Klassen der:
Ein Beispiel für den JSON ich an den Server weitergeleitet unten gezeigt Request
Schnittstelle
Können Sie bitte weitere Beispiele für die verschiedenen JSON-Antworten angeben, die Sie vom Server erhalten können? Denn wenn Sie nicht viele und sehr unterschiedliche Möglichkeiten haben, können Sie einfach etwas tun ... – MikO
Danke @MiKO für Ihre Eingabe. Andere wahrscheinliche Anfragen sind "PlayRequest", "LogoutRequest", "GetPlayersRequest", "JoinGameRequest", "StartGameRequest" usw. – fredmanglis
Ich meine, wenn Sie ein Beispiel für die JSON-Anfrage für mindestens einen dieser anderen Arten von Anfragen angeben können . Ich meine, für deine 'LoginRequest' hast du Felder:' type', 'username' und' password', was ist mit anderen Anfragen? Wie sehen sie aus? – MikO