亲宝软件园·资讯

展开

SpringMVC中的表现层结果封装

准Java全栈开发工程师 人气:0

一、为什么要将返回结果封装?

当前端发送一个请求,被处理后,我们之前的处理方式就是,对于增删改操作,我们返回 true 或 false;对于查询操作,我们就将查询后的结果返回。

虽然使用该方式能够将请求结果返回,但是前端开发人员在解析返回的数据时就会非常麻烦,他们需要根据你不同的返回结果定义不同的解析方法,造成了巨大的工作量。

如果双方之间能够定义一种方式,每次后端开发人员在返回数据时都返回指定格式的数据,那么前端开发人员在解析数据时也就非常的方便迅速,这就使得在开发项目的过程中,不会因为这些无关紧要的问题而耗费大量的时间。

二、封装步骤

1、自定义封装类

public class Result {
    private Integer code;
    private Object data;
    private String msg;

    public Result() {
    }

    public Result(Integer code, Object data) {
        this.code = code;
        this.data = data;
    }

    public Result(Integer code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }
}

因为是将表现层方法的返回结果进行封装,所以可以将 Result 封装类定义在 controller 包中。

当然,封装类中还可以根据需要定义一些其他属性,并不是说一定是这三种。

2、编写 Code 类统一状态码

public class Code {
    public static final Integer INSERT_OK = 20011;
    public static final Integer DELETE_OK = 20021;
    public static final Integer UPDATE_OK = 20031;
    public static final Integer SELECT_OK = 20041;

    public static final Integer INSERT_ERR = 20010;
    public static final Integer DELETE_ERR = 20020;
    public static final Integer UPDATE_ERR = 20030;
    public static final Integer SELECT_ERR = 20040;

    public static final Integer SYSTEM_ERR = 50001;
    public static final Integer SYSTEM_TIMEOUT_ERR = 50002;
    public static final Integer SYSTEM_UNKNOW_ERR = 59999;
    public static final Integer BUSINESS_ERR = 60002;
}

将状态码定义为常量,在需要是可以直接调用使用。以上仅列举了一些常用的状态码,需要什么,都可以自己定义。

三、案例演示

1、需求分析

2、编写 UserController 类

@RestController
@RequestMapping("users")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public Result insert(@RequestBody User user) {
        boolean insert = userService.insert(user);
        return new Result(insert ? Code.: Code.INSERT_ERR,insert);
    }

    @PutMapping
    public Result update(@RequestBody User user) {
        boolean update = userService.update(user);
        return new Result(update ? Code.UPDATE_OK : Code.UPDATE_ERR,update);
    }

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        boolean delete = userService.delete(id);
        return new Result(delete ? Code.DELETE_OK : Code.DELETE_ERR,delete);
    }

    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id) {
        User user = userService.selectById(id);
        Integer code = user != null ? Code.SELECT_OK : Code.SELECT_ERR;
        String msg = user != null ? "" : "查询结果不存在,请重试!";
        return new Result(code,user,msg);
    }

    @GetMapping
    public Result selectAll() {
        List<User> userList = userService.selectAll();
        Integer code = userList != null ? Code.SELECT_OK : Code.SELECT_ERR;
        String msg = userList != null ? "" : "查询结果不存在,请重试!";
        return new Result(code,userList,msg);
    }
}

采用 REST 风格编写。

仔细查看后会发现,其实和我们之前写的方法并没有什么太大的区别,无非就是将返回值改为了 Result 类型,返回的不单单是 data 数据,又多传递了 code 和 msg 值而已。

虽然仅有小的改变,但是却大大的加快了项目的开发效率,给前后端开发人员减少了不少麻烦。

3、使用 Postman 工具测试

1)测试 insert 方法

2)测试 update 方法

3)测试 delete 方法

根据返回结果,能够很清晰的知道删除操作并没有成功执行。这是因为数据库表中并没有 id = 3 的数据,所以删除操作没能成功执行。

4)测试 selectById 方法

对于查询操作,如果成功查询到了数据,就会将数据放到 data 中。

5)测试查询全部方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

加载全部内容

相关教程
猜你喜欢
用户评论