为什么需要设置统一的返回对象
在企业级开发中。对于返回的信息需要有统一规范的处理。一、方便用户了解到是什么原因造成,以方便用户改正。二、由于现在大部分是前后分离,统一的返回处理对于前端开发人员来说,能快捷的判断什么返回信息该做什么样的处理。三、方便维护。统一的返回对象能够清晰明了的了解原因。四、方便开发,如果需要使用返回的时候直接调用这个对象就可以了。
如何使用
创建统一的返回方法
/**
* 通用返回对象,所有http接口都必须返回此对象
*
* @author
* @since
*/
//lombok注解:注解后在编译时会自动加Getter,Setter,equals,canEqual,hasCode,toString等方法。
@Data
//lombok注解:添加一个构造函数,该构造函数含有所有已声明字段属性参数
@AllArgsConstructor
//lombok注解:创建一个无参构造函数
@NoArgsConstructor
//实体类与json互转的时候 属性值为null的不参与序列化
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 响应代码
*/
@ApiModelProperty("响应代码")
protected Integer code;
/**
* 响应消息
*/
@ApiModelProperty("响应消息")
protected String msg;
/**
* 响应数据
*/
@ApiModelProperty("响应数据")
protected T data;
/**
* 成功
*
* @param msg 消息
* @param <T> 返回数据类型
* @return DataResponse
*/
public static <T> Response<T> success(String msg) {
return new Response<>(200, msg, null);
}
/**
* 成功
*
* @param data 消息
* @param <T> 返回数据类型
* @return DataResponse
*/
public static <T> Response<T> data(T data) {
return new Response<>(200, "成功", data);
}
/**
* 成功
*
* @param msg 消息
* @param data 数据
* @param <T> 返回数据类型
* @return DataResponse
*/
public static <T> Response<T> success(String msg, T data) {
return new Response<>(200, msg, data);
}
/**
* 失败
*
* @return Response
*/
public static <T> Response<T> failed() {
CommonError error = CommonError.error();
return new Response<>(error.getCode(), error.getMsg(), null);
}
/**
* 失败
*
* @return Response
*/
public static <T> Response<T> failed(String msg) {
CommonError error = CommonError.error(msg);
return new Response<>(error.getCode(), error.getMsg(), null);
}
/**
* 失败
*
* @return Response
*/
public static <T> Response<T> failed(CommonError error) {
return new Response<>(error.getCode(), error.getMsg(), null);
}
/**
* @param code 代码
* @param msg 消息
* @param data 数据
* @param <T> 数据类型
* @return 结果
*/
public static <T> Response<T> response(int code, String msg, T data) {
return new Response<>(code, msg, data);
}
/**
* 判断响应结果是否成功
*
* @return 结果
*/
//@ApiModelProperty("响应状态")
public boolean isSuccess() {
if (Objects.isNull(code)) {
return false;
}
return Objects.equals(Integer.valueOf("200"), code);
}
}
调用举例
controller
//restful 风格API
@GetMapping("/{id}")
//@PathVariable("id") :绑定URI模板变量值,用来获得请求url中的动态参数
public Response queryById(@PathVariable("id") Long id) {
//统一返回response 将数据放入data中
return Response.data(comOrganizationService.getById(id));
}
@PostMapping("/query/page")
public Response page(@RequestBody @Valid ComOrganizationQueryParam param) {
try {
log.info("分页查询租户供应商");
QueryWrapper<ComOrganization> queryWrapper = new QueryWrapper<ComOrganization>();
queryWrapper.eq(param.getCompanyId() != null && param.getCompanyId() != 0, "companyid", param.getCompanyId());
queryWrapper.eq(param.getDepartmentId() != null && param.getDepartmentId() != 0, "department_id", param.getDepartmentId());
queryWrapper.select(BeanUtils.getSqlSelect(ComOrganization.class));
queryWrapper.orderDesc("id");
IPage<ComOrganization> page = new Page<ComOrganization>(Long.parseLong(param.getPageNumber()), Long.parseLong(param.getPageSize()));
return Response.data(comOrganizationService.page(page, queryWrapper));
} catch (ServiceException e) {
return Response.failed(e.getError().getMsg());
} catch (Exception e) {
log.error("分页查询供应商异常", e);
return Response.failed("分页查询供应商异常");
}
}
Response
上面举例中已经使用到的一下列出来方便对比。
/**
* 成功
*
* @param data 消息
* @param <T> 返回数据类型
* @return DataResponse
*/
public static <T> Response<T> data(T data) {
return new Response<>(200, "成功", data);
}
/**
* 失败
*
* @return Response
*/
public static <T> Response<T> failed(String msg) {
CommonError error = CommonError.error(msg);
return new Response<>(error.getCode(), error.getMsg(), null);
}
/**
* 失败
*
* @return Response
*/
public static <T> Response<T> failed(CommonError error) {
return new Response<>(error.getCode(), error.getMsg(), null);
}
结语
有了统一的返回对象。代码少了,更规范化了,维护也更简单了。因为最近这个项目用到了这些东西,以前也没有专门的整理出来,现在整理出来给自己留个记录,也为众多初学者提供一个学习的地方。