Spring AOP:字段验证不起作用

Spring AOP:字段验证不起作用,spring,aop,spring-aop,bean-validation,Spring,Aop,Spring Aop,Bean Validation,我有一个Jersey资源类,它对头参数使用字段验证 @Controller @RequiredArgsConstructor public class Resource { @Min(value = 0) @HeaderParam("id") private int id; @HeaderParam("Authorization") private String header; @Authenticate public void ge

我有一个Jersey资源类,它对头参数使用字段验证

@Controller
@RequiredArgsConstructor
public class Resource {

    @Min(value = 0)
    @HeaderParam("id")
    private int id;

    @HeaderParam("Authorization")
    private String header;

    @Authenticate
    public void get() {
    }

}
然后我在@Authenticate注释处创建了一个切入点

public class Aspect {

    @Before("@annotation(Authenticate)")
    public void doAuthenticate() {
    }

}
问题是,在创建方面之后,id的字段验证不再有效(传入-1作为id头不会违反约束)

我猜原因是因为SpringAOP使用CGLIB作为代理,它在创建代理时不填充字段,所以默认值传递给验证,然后在脱离方面之后,它已经脱离验证阶段,因此验证不起作用

因此,我的问题是: 1.我理解正确吗?
2.如何使字段验证工作正常?

我对Spring或Jersey都不太了解,但您是对的,因为动态代理只是名称所暗示的:代理。它包装原始对象的方法,使您能够拦截它们,例如通过AOP。它不代理或复制成员变量。因此,要么使用AspectJ而不是SpringAOP,完全避免使用代理,要么需要配置验证,确保验证在原始对象上完成,而不是在代理上完成。不过,如果没有一个答案,我就不能多说了。GitHub会很好。@kriegaex谢谢您的评论。我最终决定不依赖于字段参数。