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

本文介绍如何通过Spring的ResponseBodyAdvice和自定义消息转换器,实现基于注解的JSON字段过滤,并对接口响应体进行统一封装。通过@SerializeField注解指定保留字段,结合HttpMessageConverter在响应写出前处理数据,支持嵌套类型的字段筛选。详细代码和示例可在GitHub项目JsonFilter中查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  • 后台需要给前端返回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对结果拦截

对通过@ResponseBody返回的结果进行拦截(返回的结果即beforeBodyWrite中的Object,此处进行拦截,并进行相关处理)


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值