如何使Lombok + Gson与Spring AOP代理一起工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使Lombok + Gson与Spring AOP代理一起工作相关的知识,希望对你有一定的参考价值。

假设有一个简单的类Student

@Data @NoArgsConstructor @AllArgsConstructor
public class Student {
    private Integer age;
    private String name;
}

使用Spring AOP在aop.xml中添加日志记录方面

<aop:config>
    <aop:aspect id="log" ref="logging">
        <aop:pointcut id="selectAll" expression="execution(* com.tutorial.Student.getName(..))"/>
        <aop:before pointcut-ref="selectAll" method="beforeAdvice"/>
        <aop:after pointcut-ref="selectAll" method="afterAdvice"/>
    </aop:aspect>
</aop:config>
<bean id="student" class="com.tutorial.Student">
    <property name="name"  value="Zara" />
    <property name="age"  value="11"/>
</bean>

排除方面字段

public class ExcludeAspects implements ExclusionStrategy {
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        if(f.getName().startsWith("CGLIB$"))
            return true;
        return false;
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
}

main,注意第一个bean的输出是空的(“{}”):

public static void main(String[] args) {
   Gson gson = new GsonBuilder().setPrettyPrinting().addSerializationExclusionStrategy(new ExcludeAspects()).create();
   ApplicationContext context = new ClassPathXmlApplicationContext("aop.xml");

   //return "{}"
   Student student = (Student) context.getBean("student");
   gson.toJson(student);       

   //works fine
   Student student2 = new Student(11,"Zara");
   gson.toJson(student2);       
}

更新根据接受的答案,unProxy为我工作。

以上是关于如何使Lombok + Gson与Spring AOP代理一起工作的主要内容,如果未能解决你的问题,请参考以下文章

(转)Spring Boot & lombok

将 lombok 与 gradle 和 spring-boot 一起使用

Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON

Spring Boot 2.x 实践记:Gson

spring boot——请求与参数校验——重要概念——Lombok初步简介

如何正确地将特定对象列表转换为 Gson?