java响应实体类封装

前后端分离的开发模式中,或者与第三方接口交互,需要规范接口响应,下面是我在开发中的封装的一组响应实体类

  • 响应实体父类, 父类中需要一个code,因为不管是响应消息还是数据,都要有code
/**
 - @title 响应实体父类
 - @author gavin
 - @date 2020年6月10日
 */
public class Response {
	
	private String code;

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}
}
  • 信息响应实体类,继承Response类,并且需要添加一个msg属性,用于存储返回码描述
/**
 * @title 消息响应实体类
 * @author gavin
 * @date 2020年6月10日
 */
public class ResponseMsg extends Response {

	private String msg;

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
}
  • 数据响应实体类,继承Response类,并且需要添加一个data属性,用来存储响应数据
/**
 * @title 数据响应实体类
 * @author gavin
 * @date 2020年6月10日
 */
public class ResponseData extends Response{

	private Object data;

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}
}

接下来就可以使用了,新建RspController测试一下响应错误信息和响应数据

@RestController
@RequestMapping("rsp")
public class RspController {
	
	@GetMapping("msg")
	public Response msg() {
		ResponseMsg responseMsg = new ResponseMsg();
		responseMsg.setCode("401");
		responseMsg.setMsg("用户无权限");
		return responseMsg;
	}
	
	@GetMapping("data")
	public Response data() {
		ResponseData responseData = new ResponseData();
		responseData.setCode("0");
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("name", "张三");
		map.put("age", 24);
		responseData.setData(map);
		return responseData;
	}
}

启动项目,使用postman访问一下

  1. 访问/rsp/msg接口,postman收到响应如下
    在这里插入图片描述
  2. 访问/rsp/data接口,postman收到响应如下
    在这里插入图片描述

开发中,返回码通常都是共用的,不需要每个接口都写一遍硬代码,我们可以对全局错误码封装一个枚举类

public enum ResponseEnum {
	
	SUCCESS("0" , "ok"),
	AUTH_DENIED("401","用户无权限");
	
	private String code;
	private String msg;
	
	ResponseEnum(String code , String msg){
		this.code = code;
		this.msg = msg;
	}
	
	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}	
}

有了全局返回码枚举类后,/rsp/msg接口中就不要写硬代码了,可以改成如下

@GetMapping("msg")
public Response msg() {
	ResponseMsg responseMsg = new ResponseMsg();
	responseMsg.setCode(ResponseEnum.AUTH_DENIED.getCode());
	responseMsg.setMsg(ResponseEnum.AUTH_DENIED.getMsg());
	return responseMsg;
}

虽然这样避免了多处使用硬代码的问题,但还是有些繁琐,我们还可以编写一个ResponseUtil类,来简化开发

/**
 * @title 响应工具类
 * @author gavin
 * @date 2020年6月11日
 */
public class ResponseUtil {
	/**
	 * @title 成功返回码
	 * @author gavin
	 * @date 2020年6月11日
	 * @return
	 */
	public static Response success() {
		ResponseMsg response = new ResponseMsg();
		response.setCode(ResponseEnum.SUCCESS.getCode());
		response.setMsg(ResponseEnum.SUCCESS.getMsg());
		return response;
	}
	
	
	/**
	 * @title 通用返回码
	 * @author gavin
	 * @date 2020年6月11日
	 * @return
	 */
	public static Response rspMsg(String code , String msg) {
		ResponseMsg response = new ResponseMsg();
		response.setCode(code);
		response.setMsg(msg);
		return response;
	}
	
	/**
	 * @title 通用返回码
	 * @author gavin
	 * @date 2020年6月11日
	 * @return
	 */
	public static Response rspMsg(ResponseEnum responseEnum) {
		ResponseMsg response = new ResponseMsg();
		response.setCode(responseEnum.getCode());
		response.setMsg(responseEnum.getMsg());
		return response;
	}
	
	/**
	 * @title 响应数据
	 * @author gavin
	 * @date 2020年6月11日
	 * @param data
	 * @return
	 */
	public static Response rspData(Object data) {
		ResponseData response = new ResponseData();
		response.setCode(ResponseEnum.SUCCESS.getCode());
		response.setData(data);
		return response;
	}
}

ResponseUtil类中封装了4个方法,基本上够我们日常开发使用了,接下来我们可以用这个工具类来简化一下/rsp/msg接口和/rsp/data接口,代码如下

@RestController
@RequestMapping("rsp")
public class RspController {
	
	@GetMapping("msg")
	public Response msg() {
		return ResponseUtil.rspMsg(ResponseEnum.AUTH_DENIED);
	}
	
	@GetMapping("data")
	public Response data() {
		
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("name", "张三");
		map.put("age", 24);
		
		return ResponseUtil.rspData(map);
	}
}

通过工具类简化后,基本上响应代码就只需要一行就可以了,大大简化了我们的代码。

猜你喜欢

转载自blog.csdn.net/u012693016/article/details/106672301