SpringMVC统一响应格式

前言

当涉及到构建Web应用程序时,Spring MVC是一个广泛使用且受欢迎的框架。它提供了一种灵活且功能强大的方式来开发基于MVC模式的Web应用程序。在Spring MVC中,控制器负责处理HTTP请求,并返回适当的响应给客户端。

然而,对于复杂的应用程序,往往需要定义一致的响应格式,以便客户端能够更好地解析和处理响应数据。这就是统一响应格式的重要性所在。

本篇博客将介绍如何在Spring MVC中实现统一的响应格式。我们将探讨如何定义一个标准的响应对象,包含常见的响应字段(如状态码、消息、数据等)。这样做的好处是,客户端无论收到什么类型的响应,都可以按照同一套规则进行解析,从而简化了客户端代码的编写和维护。

通过阅读本文,您将学习到如何在Spring MVC中实现统一响应格式的方法。这将提高您的开发效率,使您能够更好地与前端开发人员协作,构建出高质量、易于维护的Web应用程序。

正题

本文中的代码是我现在所做项目中所用的,是若依框架中的,本博客只做分享

1. 响应信息主体

/**
 * 响应信息主体
 *
 * @author xiaoli
 */
@Data
@NoArgsConstructor
@ApiModel("请求响应对象")
public class R<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 成功
     */
    public static final int SUCCESS = 200;

    /**
     * 失败
     */
    public static final int FAIL = 500;

    @ApiModelProperty("消息状态码")
    private int code;

    @ApiModelProperty("消息内容")
    private String msg;

    @ApiModelProperty("数据对象")
    private T data;

    public static <T> R<T> ok() {
        return restResult(null, SUCCESS, "操作成功");
    }

    public static <T> R<T> ok(T data) {
        return restResult(data, SUCCESS, "操作成功");
    }

    public static <T> R<T> ok(String msg) {
        return restResult(null, SUCCESS, msg);
    }

    public static <T> R<T> ok(String msg, T data) {
        return restResult(data, SUCCESS, msg);
    }

    public static <T> R<T> fail() {
        return restResult(null, FAIL, "操作失败");
    }

    public static <T> R<T> fail(String msg) {
        return restResult(null, FAIL, msg);
    }

    public static <T> R<T> fail(T data) {
        return restResult(data, FAIL, "操作失败");
    }

    public static <T> R<T> fail(String msg, T data) {
        return restResult(data, FAIL, msg);
    }

    public static <T> R<T> fail(int code, String msg) {
        return restResult(null, code, msg);
    }

    private static <T> R<T> restResult(T data, int code, String msg) {
        R<T> r = new R<>();
        r.setCode(code);
        r.setData(data);
        r.setMsg(msg);
        return r;
    }
}

2. web层通用数据处理

/**
 * web层通用数据处理
 *
 * @author xiaoli
 */
public class BaseController {

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected R<Void> toAjax(int rows) {
        return rows > 0 ? R.ok() : R.fail();
    }

    /**
     * 响应返回结果
     *
     * @param result 结果
     * @return 操作结果
     */
    protected R<Void> toAjax(boolean result) {
        return result ? R.ok() : R.fail();
    }

    /**
     * 页面跳转
     */
    public String redirect(String url) {
        return StringUtils.format("redirect:{}", url);
    }

    /**
     * 获取用户缓存信息
     */
    public LoginUser getLoginUser() {
        return LoginHelper.getLoginUser();
    }

    /**
     * 获取登录用户id
     */
    public Long getUserId() {
        return LoginHelper.getUserId();
    }

    /**
     * 获取登录部门id
     */
    public Long getDeptId() {
        return LoginHelper.getDeptId();
    }

    /**
     * 获取登录用户名
     */
    public String getUsername() {
        return LoginHelper.getUsername();
    }
}

3. 示例代码(代码只是作结构参考用,具体根据业务而定)

/**
 * @author xiaoli
 * @since 2023/12/4 19:38
 */
public class TestController {

    @Autowired
    private TestService testService;

    @ApiOperation("新增")
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody Test test) {
        return toAjax(testService.insertByTest(test) ? 1 : 0);
    }

    @ApiOperation("根据id获取详细信息")
    @GetMapping("/{id}")
    public R<Test> getInfo(@ApiParam("主键")
                                      @NotNull(message = "主键不能为空")
                                      @PathVariable("id") Long id) {
        return R.ok(testService.queryById(id));
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值