buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

API接口的请求参数要更名,如何保持代码可读性?

 

接口参数名与程序里定义的model属性名,是完全一致的吗?本文通过案例,来讲述他们之间的联系与区别。

回到顶部

1

我们会补贴系统对外暴露的获取收银台地址的API,响应参数是一个url地址,这个url地址包含一个参数,就是我们的订单号。形如:http://***.com/#/pages/orderPay/index?orderNo=4d2b8e3f9a6c4e278b5e

对应到程序里的springmvc接口,如下:

 

@RequestMapping Result pay(String orderNo);

 

 

 

为系统安全起见,我们决定,把参数名orderNo重命名为一个混淆字符,如s。

接口程序怎么改呢?easy,改成下面这样

 

@RequestMapping Result pay(String s);

 

 

有没有意识到这么改有什么不对劲儿?

有的话,说明你比较靠谱。→

显然是可读性差呀!这意味着这个pay方法里的所有的orderNo都将变成s。对于阅读和维护这段代码的同学,谁知道s是个什么鸟东西呢?

 

那么,该怎么调优我们的程序呢?

你也许会想到,用@RequestParam 注解呀!

 

没错,你很棒。知识就是力量,你更懂对知识的运用。可以用@RequestParam 注解 。

@RequestMapping Result pay(@RequestParam("s") String orderNo);

 

完事!

 

 

回到顶部

2

请允许我再提一个问题:如果这个pay方法的请求参数是一个对象,当如何应对这种变化呢?

 

《大话西游月光宝盒》中,周星驰为救莫文蔚开启月光宝盒无限穿越。这次,让我们重新开启本文。

 

回到顶部

3

我们会补贴系统对外暴露的获取收银台地址的API,响应参数是一个url地址。对应到程序里的springmvc接口,如下:

 

@RequestMapping Result pay(OrderVO orderVO);

其中,OrderVO定义如下:

@Data
class OrderVO {    private String orderNo;    private String io;}

 

 

为系统安全起见,我们决定,把参数名orderNo参数重命名为一个混淆字符,如s。

程序怎么改呢?easy,重命名OrderVO#orderNo 为 OrderVO#s 呗!

 

@Data
class OrderVO {    private String s;    private String io;}

 

 

有没有意识到这么改有什么不对劲儿?

有意识的话,说明你比较靠谱。→

显然是可读性差呀!这意味着这个pay方法(已经可能存在的pay所调用的方法)里的所有的orderNo都将变成s。对于阅读和维护这段代码的同学,谁知道s是个什么鸟东西呢?

 

那么,该怎么调优我们的程序呢?

你也许会想到,可以利用Jackson做文章。

没错,你很棒。知识就是力量,你更懂对知识的运用。SpringMVC是利用Jackson进行数据的codec。我们正是利用Jackson的注解来改造。

 

@Data
class OrderVO {    @JsonProperty("s")      private String orderNo;        private String io;}

 

 

完事!

 

posted on   buguge  阅读(98)  评论(1编辑  收藏  举报

相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
历史上的今天:
2011-11-18 一段看似简单却不简单、老生常谈的程序
2011-11-18 js啊,我被open撞了一下腰
点击右上角即可分享
微信分享提示