处理json参数的注解,更方便的获取请求参数

@JSONParam需求描述

当请求的content-type为application/json时实现一下功能:

  1. 对请求体中的参数做required判断
  2. 解析参数为指定类型
  3. 提供默认值

为什么做@JSONParam(瞎掰)

  • 自Java5.0版本引入注解之后,各种注解层出不穷。注解的使用让代码简洁优雅,更重要的是,提高代码重用,达到解耦的目的,利于代码的维护和修改。
  • 对于Web后端框架来说,Spring 相关组件提供了大量注解,提高了开发速度,就拿@RequestParam来说,放在接口方法的参数前,通过几个属性,就能减少很多的参数校验和类型转换操作。
  • 但是@RequestParam只应用于content-type为application/x-www-form-urlencoded(传统表单方式)的场景,并不适用application/json情况。这时大多会使用@RequestBody代替@RequestParam来获取一个JSON对象(或其他自定义对象),不过对这个JSON对象中的属性和值仍是无感,所以必须在方法体中对这个JSON对象中的属性进行一系列判断。在写这一系列判断时,真是万分感念@RequestParam的贴心与勤劳。

不足之处

  • 每个参数的处理都会请求体中的输入流转为字符串,感觉会有更好的处理方式,但还没想好;

想要的改进

  • name属性可以接受数组,required、defaultValue也接受数组,并与name对应,当返回值类型为JSON时,对这些内容进行一一判断和赋值操作,可避免上面提到的转字符串问题;

使用方法

  1. 在pom中添加maven依赖;
    1
    2
    3
    4
    5
    <dependency>
    <groupId>com.rongzhiweilai.extension</groupId>
    <artifactId>spring-annotation-extension</artifactId>
    <version>0.1.0-releases</version>
    </dependency>
  • Tip: 发布时版本号写的略显随意,实例项目中也需要引入该版本
  1. 将类WebListenerConfiguration加入Spring容器;

    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    @Import({com.rongzhiweilai.extension.config.WebListenerConfiguration.class})
    public class DemoApplication {
    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
    }
    }
  2. 示例项目
    点击查看示例项目代码

希望和大家交流意见,或是推荐已有的实现方案

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2015-2020 AChampion
  • Powered by Hexo Theme Ayer
  • PV: UV:

开玩笑的~不用打赏