Json过滤器(基于spring自定义注解的方式,对字段进行过滤,支持嵌套类型,并接口响应体格式统一封装)

在实际的开发过程中,会经常遇到如下情景:

  • 后台需要给前端返回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 {};
}

通过ResponseBodyAdvice

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值