博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java~api返回值的标准化
阅读量:6147 次
发布时间:2019-06-21

本文共 2134 字,大约阅读时间需要 7 分钟。

api返回值的标准化

例如

{"status":200,"message":"操作成功","data":"{\"id\":1,\"name\":\"张三\"}"}

封装返回对象

对象被封装在base.util.ResponseUtils类型下,返回值是标准的ResponseEntity对象,返回体

进行了二次封装,主要有status,messsagedata组成,返回方法有ok和okMessage,如果
真是返回消息,不需要对象,可以选择使用okMessage,反之使用ok方法。

封装的返回对象:

@Builder  @Getter  @NoArgsConstructor  @AllArgsConstructor  static class ResponseBody {    private int status;    private String message;    private Object data;  }

httpError和我们封装的httpError

对于http error来说有很多种,基本可以定为code在400到500之间的,像客户端参数问题就是400- bad request,而没有认证就是401-Unauthorized,认证但没有对应的权限就是403-Forbidden,请求的

资源没有发现就是404-Not Found,请求方式错误(方法是post,你发起请求用了get)就是405- Method Not Allowed等。

  • 使用标准http响应状态码
@GetMapping(GET_HTTP_ERROR)  ResponseEntity
getHttpError() throws IOException { return ResponseEntity.badRequest().build(); } @Test public void getHttpError() throws Exception { mockMvc .perform( get(LindDemo.GET_HTTP_ERROR) .accept(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().is(400)); }

响应的结果

MockHttpServletResponse:           Status = 400    Error message = null          Headers = {}     Content type = null             Body =     Forwarded URL = null   Redirected URL = null          Cookies = []
  • 使用我们封装的status状态码
@GetMapping(GET_ERROR)  ResponseEntity
getError() throws IOException { return ResponseUtils.badRequest("传入的参数非法!"); } @Test public void getError() throws Exception { mockMvc .perform( get(LindDemo.GET_ERROR) .accept(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()); }

响应的结果

MockHttpServletResponse:           Status = 200    Error message = null          Headers = {Content-Type=[application/json;charset=UTF-8]}     Content type = application/json;charset=UTF-8             Body = {"status":400,"message":"传入的参数非法!","data":{}}    Forwarded URL = null   Redirected URL = null          Cookies = []

通过上面的响应结果可以看到,我们封装的请求httpcode还是200,只不过把请求错误400状态码写在了body

对象里,目前这种方法用的比较多,像一些第三方接口用的都是这种方式,他们会规定相应的响应规范。

总结

事实上,两种响应体都没有问题,关键在于开发之间的规则要确定,不要在项目里两者兼用!

转载于:https://www.cnblogs.com/lori/p/10494923.html

你可能感兴趣的文章
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>