Java接口统同样式返回模板
背景
在进行接口开发时,通常须要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其余人进行接口之间的联调时不会显得很杂乱无章。而这种固定的格式若是放在Java的每一个接口单独处理时,又会在接口开发时很繁琐,因此这个时候能够采用封装一个实体类,统一返回固定模板格式的内容。微信
封装模板
先看一下没有封装以前,接口代码和返回格式:app
/** * 用户修改 * @return 返回修改的用户信息 */ @PutMapping(value = "update") public User update(@RequestBody User user) { User updatedUser = userService.update(user); return updatedUser; }
{ "userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44", "username": "ww", "password": "123456", "status": 0, "createTime": 310863886132307, "updateTime": 312955781619836 }
很显然,这种原始的内容返回虽然很直观,可是若是在发生错误的时候,那么接口的返回就比较的不天然了,甚至会将底层的错误对外暴露,下面介绍下一个简单的统一接口样式的封装:dom
枚举类ResponseCode:定义返回码code及提示信息msg
咱们先定义一个枚举类,用于封装返回的code码和提示信息msg,固然也能够封装其余的信息,好比状态status,这个能够根据本身的项目自由选择。测试
package com.server.config; /** * @Package com.server.config * @Author wuzy * @Date 2019/10/30 14:47 * @Version V1.0 * @Description: code码封装枚举类 */ public enum ResponseCode { /** 成功 */ SUCCESS("200", "成功"), /** 操做失败 */ ERROR("500", "操做失败"); private ResponseCode(String value, String msg){ this.val = value; this.msg = msg; } public String val() { return val; } public String msg() { return msg; } private String val; private String msg; }
封装类ResultData: 定义code、msg及数据data
再定义一个封装类ResultData,该类用于接口返回时的统一格式封装,这里,咱们定义了三个属性,分别为状态码code,提示消息msg以及返回的数据data。下面是具体的代码:this
package com.server.config; import lombok.Data; /** * @Package com.server.config * @Author wuzy * @Date 2019/10/30 14:38 * @Version V1.0 * @Description: 返回样式封装 */ @Data public class ResultData { private String code; private String msg; private Object data; public static ResultData success(Object data) { return resultData(ResponseCode.SUCCESS.val(), ResponseCode.SUCCESS.msg(), data); } public static ResultData success(Object data, String msg) { return resultData(ResponseCode.SUCCESS.val(), msg, data); } public static ResultData fail(String code, String msg) { return resultData(code, msg, null); } public static ResultData fail(String code, String msg, Object data) { return resultData(code, msg, data); } private static ResultData resultData(String code, String msg, Object data) { ResultData resultData = new ResultData(); resultData.setCode(code); resultData.setMsg(msg); resultData.setData(data); return resultData; } }
能够根据本身项目的需求进行方法、属性等内容的扩展。code
测试实例
这里,咱们使用UserController中的save()方法进行测试,查看其添加了统同样式以后的效果,先看下该方法:server
/** * 用户保存 * @return 返回保存的用户信息 */ @PostMapping(value = "save") @ApiOperation(value = "保存用户信息", notes = "保存用户的详细信息") public ResultData save(@RequestBody User user) { try { User savedUser = null; if (user != null) { if (StringUtils.isEmpty(user.getUserId())) { user.setUserId(UUID.randomUUID().toString()); } savedUser = userService.save(user); // int i = 1/0; // 测试异常现象时放开这行代码 } return ResultData.success(savedUser); } catch (Exception e) { e.printStackTrace(); return ResultData.fail(ResponseCode.ERROR.val(), "用户保存过程当中发生异常,请检查!"); } }
先看一下成功(也就是调用success方法)的状况接口
{ "code": "200", "msg": "成功", "data": { "userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44", "username": "ww", "password": "123456", "status": 0, "createTime": 310863886132307, "updateTime": 312955781619836 } }
再看一下发生异常或者保存失败时候的错误提示信息,这里使用1/0的异常来测试,结果以下:ip
{ "code": "500", "msg": "用户保存过程当中发生异常,请检查!", "data": null }
到这里,基本上关于接口样式的模板也就介绍完了,若有不许确的地方,请留言多多指教。开发
微信公众号: 源码湾
欢迎关注本人微信公众号: 源码湾。 本公众号将不按期进行相关源码及相关开发技术的分享,共同成长,共同进步~