Rest响应bean扩展Map

时间:2017-06-20 13:58:20

标签: java json spring

在spring rest应用程序上下文中,我正在尝试创建一个通用的响应bean。

目的是避免为每个方法创建一个特定的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结果是否可以包含地图字段和类属性?

1 个答案:

答案 0 :(得分:0)

您需要修改响应类。确保你有map的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"
    }
}