赞
踩
前后端分离项目中后端开发需要写相应的接口,定义统一的返回格式有利于提高开发效率和沟通的成本。通常返回的格式主要如下两种:
1. 只返回相应的状态,格式如下:
- {
- "code": "200",
- "msg": "SUCCESS"
- }
2. 返回相应的状态及数据,格式如下:
- {
- "code": "200",
- "msg": "查询成功",
- "result": {
- "id": 10,
- "name": "张三",
- "emil": "1234456@qq.com",
- "phone": null,
- "address": "测试地址"
- }
- }
状态代码定义如下:
code : 请求处理状态
Springboot中我们可以使用泛型来定义统一的返回结果:
1. 先定义只返回状态的Result
- package com.example.demo.base;
-
- import com.alibaba.fastjson.JSON;
-
- public class Result {
- private String code;
- private String 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;
- }
-
- @Override
- public String toString() {
- return JSON.toJSONString(this);
- }
- }
定义即有数据又有返回状态的DateResult
- package com.example.demo.base;
-
- import java.io.Serializable;
-
- public class DateResult<T> extends Result implements Serializable {
- private T result;
-
- public T getResult() {
- return (T) result;
- }
-
- public void setResult(T result) {
- this.result = result;
- }
-
- }
定义响应码枚举
- package com.example.demo.base;
-
- /**
- * 响应码枚举
- */
- public enum ResultCode {
- SUCCESS("200"), //成功
- FAIL("400"), //失败
- UNAUTHORIZED("401"), //未认证(签名错误)
- NOT_FOUND("404"), //接口不存在
- INTERNAL_SERVER_ERROR("500");//服务器内部错误
-
- private final String code;
-
- ResultCode(String code) {
- this.code = code;
- }
-
- public String code() {
- return code;
- }
- }
在Controller类中使用方法如下:
- package com.example.demo.controller;
-
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- import com.example.demo.base.DateResult;
- import com.example.demo.base.Result;
- import com.example.demo.base.ResultCode;
- import com.example.demo.entity.User;
-
- @RestController
- @RequestMapping("/user")
- public class UserController {
- @PostMapping("/update")
- public Result updateUser(@RequestParam Integer id) {
- Result result = new Result();
- //相应的逻辑更新逻辑......... 假如更新成功
- result.setCode(ResultCode.SUCCESS.code());
- result.setMsg("更新成功");
- return result;
- }
-
- @RequestMapping("/detail")
- public DateResult<User> queryUser(@RequestParam Integer id) {
- User user = new User();
- user.setId(10);
- user.setName("张三");
- user.setEmil("1234456@qq.com");
- user.setAddress("测试地址");
- DateResult<User> dateResult = new DateResult<User>();
- dateResult.setCode(ResultCode.SUCCESS.code());
- dateResult.setMsg("查询成功");
- dateResult.setResult(user);
- return dateResult;
- }
- }
实体类User代码如下:
- package com.example.demo.entity;
-
- import java.io.Serializable;
-
- import com.alibaba.fastjson.JSON;
-
- public class User implements Serializable {
- private Integer id;
- private String name;
- private String emil;
- private String phone;
- private String address;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getEmil() {
- return emil;
- }
-
- public void setEmil(String emil) {
- this.emil = emil;
- }
-
- public String getPhone() {
- return phone;
- }
-
- public void setPhone(String phone) {
- this.phone = phone;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- @Override
- public String toString() {
- return JSON.toJSONString(this);
- }
- }
先测试没有数据的返回格式,测试结果如下:
测试有返回数据的格式,测试结果如下:
如上的返回结果,我们需要在controller类中每次都需要new一个返回对象比较麻烦,我们可以新建一个ResultUtil
- package com.example.demo.base;
-
- /**
- * 响应结果生成工具
- */
- public class ResultUtil {
- private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";
-
- public static Result genSuccessResult() {
-
- Result result = new Result();
- result.setCode(ResultCode.SUCCESS.code());
- result.setMsg(DEFAULT_SUCCESS_MESSAGE);
- return result;
- }
-
- public static <T> DateResult<T> genSuccessResult(T data) {
- DateResult<T> dateResult = new DateResult<T>();
- dateResult.setCode(ResultCode.SUCCESS.code());
- dateResult.setMsg(DEFAULT_SUCCESS_MESSAGE);
- dateResult.setResult(data);
- return dateResult;
- }
-
- }
controller 类的代码修改如下:
- package com.example.demo.controller;
-
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- import com.example.demo.base.DateResult;
- import com.example.demo.base.Result;
- import com.example.demo.base.ResultUtil;
- import com.example.demo.entity.User;
-
- @RestController
- @RequestMapping("/user")
- public class UserController {
- @PostMapping("/update")
- public Result updateUser(@RequestParam Integer id) {
-
- return ResultUtil.genSuccessResult();
- }
-
- @RequestMapping("/detail")
- public DateResult<User> queryUser(@RequestParam Integer id) {
- User user = new User();
- user.setId(10);
- user.setName("张三");
- user.setEmil("1234456@qq.com");
- user.setAddress("测试地址");
- return ResultUtil.genSuccessResult(user);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。