2017-06-20 3 views
0

In einem Spring Rest Application-Kontext, ich versuche, eine generische Antwort Bean zu erstellen.Rest Antwort Bean erweitert Karte

Der Zweck besteht darin, zu vermeiden, eine spezifische Bean für jede Methode zu erstellen.

Ich möchte Standardfelder wie Status und Nachricht verwenden, indem Sie verschiedene Eigenschaften an eine Karte binden.

Betrachten Sie das folgende Beispiel:

public class ResponseRestDefault extends HashMap { 
    private String status; 
    private String message; 

    public ResponseRestDefault() { 
    } 

    public void addParam(String key, String value) { 
     this.put(key, value); 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Nutzungs

@RequestMapping(value = "response", method = RequestMethod.GET) 
public ResponseEntity<ResponseRestDefault> response() { 

    ResponseRestDefault response = new ResponseRestDefault(); 

    response.setStatus("success"); 
    response.setMessage("ok"); 
    response.addParam("test", "value"); 

    return ResponseEntity.ok(response); 
} 

Json Ergebnis:

{ 
    "test": "value" 
} 

Ist die json Ergebnis Karte Felder und Klasseneigenschaften enthalten könnten?

+0

Es ist nicht klar, was Sie – efekctive

+1

fragen Sie Ihre Felder ignoriert, weil der Behälter nur überprüft, ob dies eine HashMap ist, wenn so iteriert durch die Schlüssel/Wert-Paare. Wenn Sie eine generische Antwort möchten, machen Sie es wirklich einfach. Vielleicht string – efekctive

+0

macht es Sinn .. vielleicht werde ich eine Komposition verwenden. –

Antwort

0

Sie müssen Ihre Antwortklasse ändern. Stellen Sie sicher, dass Sie über die Getter- und Setter-Methoden für die Karte verfügen.

public class ResponseRestDefault { 
    private String status; 
    private String message; 
    private Map<String, String> map = new HashMap<>(); 

    public ResponseRestDefault() { 
    } 

    public void setMap(String key, String value) { 
    map.put(key, value); 
    } 

    public Map<String, String> getMap() 
    { 
    return map; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Sie Antwort in folgendem Format erhalten:

{ 
    "status": "success", 
    "message": "ok", 
    "map": { 
     "test": "value" 
    } 
}