Spring Web MVC Restful API 优化之路 (1) - 参数构建优化

来源:互联网 发布:蜘蛛池监控软件 编辑:程序博客网 时间:2024/05/28 15:05

个人原创,如需转载请著名出处,谢谢。

本系列针对的是初、中级Spring Web MVC使用者。 本系列所述内容绝大部分都为干货分享。 有些插件为个人原创。

如果你的服务端的代码还是类似这样的①:

    @RequestMapping(value = "", method = RequestMethod.GET)    public void myApi(HttpServletRequest request, HttpServletResponse response) {        String pageIdx = request.getParameter("pageIdx");        String pageMax = request.getParameter("pageMax");        // ...        if (!Validator.validatePageIdx(pageIdx)) {            // return some syntax error message.            return;        }        if (!Validator.validatePageMax(pageMax)) {            // return some syntax error message.            return;        }        // ...        // do real logical stuffs        // ...    }

那么我建议你不妨认真的看下本文所推荐的参数构建优化方式。如果你使用的是Spring / Hibernate的Validator方式②(即把输入参数转化成一个实体类,验证过程通过在实体类中的成员变量中添加验证注解),那么我也建议你不妨试下本文所倡导的方式:

    @RequestMapping(value = "",method = RequestMethod.POST)    public void api(@Required("PAGE_IDX") Integer pageIdx,                    @Required("PAGE_MAX") Integer pageMax) {        // do real logical stuffs directly here now    }

Kotsu插件③地址:https://github.com/ronankim/kotsu


③相比较于①方式:

1. 在代码量上首先就有很大的缩减,简化了很多重复的代码。

2. 在应对更复杂的输入环境时更灵活简便(比如POST方式时Kotsu会自动识别"application/json"亦或"application/xml"亦或"form"类型输入或URL Param形式的输入)。

3. 输入为多种情况时应对表达更加灵活(比如甄别{}、{"userName": null}、{"userName": "abcd"}等各种情形)。


③相比较于②方式:

1. 不需要为每个输入都建立一个模型。

2. 相同的参数验证具体方法和范围等你不需要记住,只需记住策略标记字符串即可,同时所需参数直接写在函数参数中,一目了然。

3. 同样,针对不同的输入情况表达更加灵活(比如甄别{}、{"userName": null}、{"userName": "abcd"}等各种情形)。


在遇到一些临时的非复用型的输入参数时,我们亦可以使用策略注解直接表达验证和类型转化方式。(如@VInteger,@VString等)。


Kotsu主要分为三个子模块:参数提取模块(Extractor)、参数验证模块(Validator)和参数组装模块(Assembler),每个模块都可以自定义添加自己所需的方式,无需修改源码可以直接在自己的项目中实现并引入。甚至策略注释也可以完全自己扩展实现。

1 0
原创粉丝点击