控制器的响应结果

当控制器处理了请求之后,向客户端响应的结果中,应该至少包含:

  • 业务状态码:通常是数值类型的,客户端可以根据此数值来判断操作成功与否,或者,失败时是哪一种失败,具体值应该是由服务器端和客户端协商的
  • 消息:是字符串类型的,客户端可以将此消息直接显示在软件的界面中(例如显示在网页中、显示在手机APP中……),有了这个数据,客户端就不必自行组织语言来描述操作结果

由于响应结果只有1个,但是需要同时包含业务状态和消息,应该使用JSON格式来组织这样的结果,例如:

在Spring MVC框架中,当需要响应JSON格式的字符串时,需要:

  • 使用自定义的数据类型作为处理请求的方法的返回值类型,并返回自定义数据类型的对象
  • 需要在项目中添加jackson-databind依赖项
    • spring-boot-starter-web中已经包含jackson-databind
  • 需要开启注解驱动
    • 在基于XML配置的Spring MVC项目中,需要在XML配置中添加<annotation-driven/>标签
    • 在基于注解配置的Spring MVC项目中,需要在配置类上添加@EnableWebMvc注解
    • 在Spring Boot项目中,不需要额外配置

则在项目的根包下创建web.JsonResult类,在类中声明JSON结果中对应的属性:

然后,调整控制器中处理请求的方法的返回结果:

在`JsonResult`中设计了`Integer state`属性,用于表示“业务状态码”,由于此值是可以由客户端和服务器端协商的值,所以,值的大小不一定是固定的,例如“成功”,可以使用`1`表示,也可以使用`200`表示,只要协商一致即可,所以,在应用时,不应该直接将数值常量赋值到`state`属性上,否则,代码的可读性较差!


应该将数值声明为常量来使用,以增加代码的可读性!

**正例:**`jsonResult.state = ServiceCode.OK;`

在设计方法时,如果使用`Integer state`作为参数,方法的调用者仍可能不使用声明的常量,而是直接传入某个未协商的直接常量值,例如,当设计了`fail()`方法时:

则可能调用时传入错误的值:

由于state对应的值是相对有限的,是可以穷举的,则可以使用枚举来解决问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值