spring @Aspect无法使用swagger2

时间:2017-09-25 14:39:40

标签: java swagger spring-aop aspect

pom.xml版本信息:

  • springfox-swagger2:2.5.0
  • swagger-core:1.5.10
  • springfox-swagger-ui:2.6.1
  • springboot:1.5.3

我有一个swagger2和springboot的项目。

没有@Aspect的项目代码非常有效。代码如下:

public interface TestApi {
    WfExecution test(Long temp);
}


@Api(value = "TestAPI")
@RequestMapping(value = "/test")
@RestController
public class TestApiImpl implements TestApi {

    @Override
    @RequestMapping(value = "/test")
    @ApiOperation(value = "", notes = "", produces = MediaType.APPLICATION_JSON)
    public WfExecution test(@ApiParam(value = "", required = true) @RequestParam(required = true, value = "temp")
                                        Long temp) {
        return new WfExecution();
    }
}

正确的结果:

success picture

但是当我添加以下代码时,swagger-ui并没有显示test-api-impl。

@Aspect
@Component
public class LoggerAop {
    @Before("execution(* com.XXX.controller.impl.TestApiImpl.*(..))")
    public void doBeforeAdvice(JoinPoint joinPoint){
            System.out.println("XXX");
    }
}

错误结果:

fail picture

招摇与春天AOP之间是否存在冲突?

2 个答案:

答案 0 :(得分:1)

@egg

我设置了类似的项目并面临同样的问题。

在@EnableAspectJAutoProxy注释中将proxyTargetClass属性设置为true后,问题得到了解决。

@EnableAspectJAutoProxy(proxyTargetClass=true)

仅当我们使用控制器接口时才会出现此问题。

引用Java doc。

中此属性EnableAspectJAutoProxy的使用
  

用户可以使用控制为{@code FooService}创建的代理类型    {@link #proxyTargetClass()}属性。以下是CGLIB风格的子类'    代理而不是基于默认接口的JDK代理方法。

答案 1 :(得分:0)

此答案适用于仍面临问题的人 @Aspect基本上是一个过滤器。如果您排除了赃物资源,它将开始工作。

您可以使用

  @Pointcut("within(com..*..*Controller)")
  @Pointcut("within(com..*..*Service)")

因此它将仅扫描那些从com开始的文件...