在实际的开发过程中,会经常遇到如下情景:
- 后台需要给前端返回JSON数据,但是查询出来返回的数据里面有很多属性是不需要的
本文通过自定义注解的方式进行实现,对response进行拦截,通过注解参数,设置字段信息(即,过滤哪些字段,保留哪些字段),并将bean自动封装为json,作为结果返回。
实现的具体代码可以在github中直接下载运行:https://github.com/MonkeyJJC/JsonFilter
整体思路:
(1)通过ResponseBodyAdvice实现在响应体写出之前做一些处理;比如,修改返回值、加密等(此处即进行参数解析,设置过滤器的相关参数,为后续消息转换器处理准备)
(2)自定义消息转换器HttpMessageConverter
(3)自定义消息转换器的配置,通过@Bean定义HttpMessageConverter是向项目中添加消息转换器,如果Spring扫描到HttpMessageConverter类型的bean,就会将它自动添加到调用链中。否则spring会使用默认的处理器
Controll层:
@RestController
public class Demo {
@GetMapping("user")
@SerializeField(clazz = User.class, includes = {"name", "id"})
public User user() {
User user = new User(1L, "jjc", "123456");
return user;
}
}
其中@SerializeField就是自定义的注解,通过注解的方式声明是对User类进行过滤操作,留下的字段是{“name”, “id”},先看一下实现效果:
{
id: 1,
name: "jjc"
}
注解定义
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SerializeField {
Class clazz();
/**
* 需要返回的字段
* @return
*/
String[] includes() default {};
/**
* 需要去除的字段
* @return
*/
String[] excludes() default {};
}