2017-06-20 57 views
0

在spring rest应用程序上下文中,我试图创建一个通用的响应bean。Rest rest bean extends Map

目的是避免为每种方法创建特定的bean。

我想通过将各种属性绑定到地图来使用标准字段,例如状态和消息。

请看下面的例子:

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; 
    } 
} 

使用

@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结果:

{ 
    "test": "value" 
} 

是否JSON结果可能包含地图领域和类的属性?

+0

目前还不清楚你问 – efekctive

+1

它是通过忽略你的领域,因为容器只检查,如果这是一个HashMap,如果是迭代键/值对。如果你想要一个通用的响应,使它非常简单。也许字符串 – efekctive

+0

它是有道理的..也许我会用一个作文。 –

回答

0

您需要修改您的响应类。确保你有地图的getter和setter方法。

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; 
    } 
} 

您将在下面的格式得到响应:

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