@JSONParam需求描述
当请求的content-type为application/json时实现一下功能:
对请求体中的参数做required判断
解析参数为指定类型
提供默认值
为什么做@JSONParam(瞎掰)
自Java5.0版本引入注解之后,各种注解层出不穷。注解的使用让代码简洁优雅,更重要的是,提高代码重用,达到解耦的目的,利于代码的维护和修改。
对于Web后端框架来说,Spring 相关组件提供了大量注解,提高了开发速度,就拿@RequestParam来说,放在接口方法的参数前,通过几个属性,就能减少很多的参数校验和类型转换操作。
但是@RequestParam只应用于content-type为application/x-www-form-urlencoded(传统表单方式)的场景,并不适用application/json情况。这时大多会使用@RequestBody代替@RequestParam来获取一个JSON对象(或其他自定义对象),不过对这个JSON对象中的属性和值仍是无感,所以必须在方法体中对这个JSON对象中的属性进行一系列判断。在写这一系列判断时,真是万分感念@RequestParam的贴心与勤劳。
忍无可忍之下,决定自己动手写一个能够在application/json情况实现@RequestParam类似功能的注解@JSONParam,代码已经提交到github : https://github.com/championjing/spring-annotation-extension 查看具体实现代码
不足之处
每个参数的处理都会请求体中的输入流转为字符串,感觉会有更好的处理方式,但还没想好;
想要的改进
name属性可以接受数组,required、defaultValue也接受数组,并与name对应,当返回值类型为JSON时,对这些内容进行一一判断和赋值操作,可避免上面提到的转字符串问题;
使用方法
在pom中添加maven依赖;
com.rongzhiweilai.extension
spring-annotation-extension
0.1.0-releases
Tip: 发布时版本号写的略显随意,实例项目中也需要引入该版本
将类WebListenerConfiguration加入Spring容器;
@SpringBootApplication
@Import({com.rongzhiweilai.extension.config.WebListenerConfiguration.class})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
希望和大家交流意见,或是推荐已有的实现方案