spring boot 接口返回值封装

概述

rest接口会返回各种各样的数据,如果对接口的格式不加约束,很容易造成混乱。

在实际项目中,一般会把结果放在一个封装类中,封装类中包含http状态值,状态消息,以及实际的数据。

本篇实现一个结果的封装类。

封装类代码

Result.java

public class Result implements Serializable {

    @SuppressWarnings("unused")
    private static final org.slf4j.Logger log = LoggerFactory.getLogger(Result.class);

    private static final long serialVersionUID = -1802122468331526708L;
    private int status = -1;
    private String message = "待处理";
    private Map<String, Object> data = new HashMap<String, Object>();

    public Result(){}

    public Result(int status, String message){
        this.status = status;
        this.message = message;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }

    public void putData(String key, Object value) {
        data.put(key, value);
    }

    public void removeData(String key) {
        data.remove(key);
    }

    @Override
    public String toString() {
        return "Result{" +
                "status=" + status +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }
}

解释

代码应该很好懂,主要是3个成员:

  • status – 状态值,应该对应于http的状态值(200,404等等)
  • messsage – 状态消息,如“页面未找到”
  • data – 是一个hashmap,可放入键值对

下面会创建一个实际项目来演示Result封装类的用法。

创建项目

创建spring boot项目

打开Eclipse,创建spring boot的spring starter project项目,选择菜单:File > New > Project ...,弹出对话框,选择:Spring Boot > Spring Starter Project,在配置依赖时,勾选web,如不清楚怎样创建spring boot项目,参照教程: [spring boot hello world (restful接口)例子]。

image

添加代码

项目增加文件如下图

image

Result.java文件已经在上面说明过。

控制类HelloController.java

HelloController控制类实现一个接口,用于测试封装类:

@RestController
public class HelloController {

    @RequestMapping(value="/hello", method = RequestMethod.GET, produces="application/json")
    public ResponseEntity<Result> hello(@RequestParam(value="bad", required=false, defaultValue="false") boolean bad) {

        // 结果封装类对象
        Result res = new Result(200, "ok");

        if(bad) {
            res.setStatus(400);
            res.setMessage("Bad request");

            // ResponseEntity是响应实体泛型,通过它可以设置http响应的状态值,此处返回400
            return new ResponseEntity<Result>(res, HttpStatus.BAD_REQUEST);
        }

        // 把结果数据放进封装类
        res.putData("words", "Hello world!");

        // ResponseEntity是响应实体泛型,通过它可以设置http响应的状态值,此处返回200
        return ResponseEntity.ok(res);
    }
}

解释

我们把返回的“Hellow world!”字符串放进Result封装类返回,同时为使http响应头部的状态值与Result中的状态值一致,使用ResponseEntity设置状态值。

当请求/hello,返回200;请求/hello?bad=true,返回400。

运行

Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:run as -> spring boot app运行程序。 打开Postman访问接口,运行结果如下:

当请求/hello,返回200

image

请求/hello?bad=true,返回400

image

总结

本文介绍了结果封装类,供大家在实践中参考。

完整代码



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载