restful如何返回多个html,Srping Restful 接口返回值、异常统一处理

1、背景

在项目开发中,很多时候会写一个restful接口,对于此类接口为了前端方便处理,会额外增加一些标识状态的字段,比如seccess、status等,或者异常信息,body为实际内容,比如以下bean:

public class MyRestfullBody {

private int status;

private T body;

private String msg;

}

当然,完成这个功能的方式挺多的,现在我只是记录下RestControllerAdvice+ResponseBodyAdvice实现。

2、环境搭建

我直接使用的Springboot、按照官网运行最简单的Springboot应用就ok了:

POM

3a8e60864f429a57949c80e790523c2e.png

e4902ff28847621dc359f0c86cff378e.png

启动类

93ee2e1602af348ccbf6b7c5d7f63c58.png

运行结果:

7893452e0b09ae9ed2ec79a68f88f82e.png

3、处理返回结果

RestControllerAdvice通过表面意思就知道这个是对 RestController 的一些建议,对应的有 ControllerAdvice和 Controller 。 (RestController 可以简单的理解为 Controller +ResponseBody。)

RestController 虽然没有显示的使用 ResponseBody ,实际上是使用了 ResponseBody 流程的,现在我们要做的就是在 RestControllerAdvice 加上 ResponseBodyAdvice:

1804488e70acb6581d821be05e5a3539.png

ResponseBodyAdvice 这个接口有两个方法:

6f421bb69b83c64c8b7756e5820182ce.png

判断这个 Advice 适合那些 Controller ,返回true,代表所有(真实情况下肯定不能所有都拦截,不然会出问题)。

另一个方法就是我们要处理的核心了

a37b177d2643f40856f40fcc04880ece.png

看代码,就是把body封装了下,挺简单的。这儿有个主意点,就是图中的if,通过查看源码,Spring把String和其他对象分开处理的,如果body是String,封装后返回的对象会报ClassCaseException。

重新运行,结果:

d2d712a3c33a891f2c4238115f8a9cd5.png

测试List:

e0edaffe7828b8e0bc2a59f71c8e0b93.png

e9a049d4a4ee954beece94c16bb6ada4.png

结果满意。

4、异常处理

异常处理借助ExceptionHandler,这个应该没问题,大多数人都会用

在上面MyControllerAdvice类中加入:

988810f2cb5bd160a617fff8cf3e0c69.png

测试代码:

09740611cc5a6e00ad976e1d0079e82a.png

运行结果:

2cef25106961d52ed45752cfbc7f27b2.png

我对结果不咋满意。

我改成了下面这种方式:

72d27e17f2e4cce0c0843b89911261c0.png

596c46d15e22abd10803aeeee994ed23.png

运行结果:

91aa79f28d0f6432cab0dfc1707cb8d8.png

看上去还行:msg为异常消息,因为我这儿异常消息为空,所以是异常类名。

5、通过上面的方式,500异常算是处理了,现在谈谈404

处理404可以实现ErrorController:

e11cc684fc6593bb55ec69eb91b401b3.png

运行结果:(有问题哈,status为success)

643424483bfd465b4dbcb5e2edb3a213.png

以上,希望能给你们提供一些帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值