引子
在一个项目中,我们经常会封装请求的返回数据到一个对象中进行返回调用端。最常用的封装方式是直接创建一个类,定义各项实例属性并定义有参构造和Get Set 方法。
@Data
public class ResponseEntity {
private Boolean success;
private Integer code;
private String message;
private Map<String, Object> data = new HashMap<String, Object>();
public ResponseEntity(Boolean success, Integer code, String message, Map<String, Object> data) {
this.success = success;
this.code = code;
this.message = message;
this.data = data;
}
...set()...get()...
}
但是这种方式中,如果参数列表过长,或者不需要默写参数时,现有的方式显得有些过于臃肿。
从而,我们可以引入链式编程的方法,通过静态方法和方法重载的原理进行实现:
// lombok注解,为实体类生成GetSet方法
@Data
public class ResponseEntity {
private Boolean success;
private Integer code;
private String message;
private Map<String, Object> data = new HashMap<String, Object>();
//把构造方法私有
private ResponseEntity() {}
//成功静态方法
public static ResponseEntity ok() {
ResponseEntity r = new ResponseEntity();
r.setSuccess(true);
r.setCode(200);
r.setMessage("成功");
return r;
}
//失败静态方法
public static ResponseEntity error() {
ResponseEntity r = new ResponseEntity();
r.setSuccess(false);
r.setCode(400);
r.setMessage("失败");
return r;
}
public ResponseEntity success(Boolean success){
this.setSuccess(success);
return this;
}
public ResponseEntity message(String message){
this.setMessage(message);
return this;
}
public ResponseEntity code(Integer code){
this.setCode(code);
return this;
}
public ResponseEntity data(String key, Object value){
this.data.put(key, value);
return this;
}
public ResponseEntity data(Map<String, Object> map){
this.setData(map);
return this;
}
}
在使用时可以利用静态方法ok() 或 error()实例化基本的ResponseEntity对象,在利用链式编程填充属性:
ResponseEntity.ok().message("获取用户列表成功!").data("userList",list);