JavaWeb如何通过接口,找到接口所在的包和类

现在接手了一个老的web项目,由于不够了解,有的时候找接口位置需要找很久

我现在想在请求接口的时候,返回接口类的位置
项目使用SpringMVC,基本写法如下:

package com.xxx.controller;

@Controller
@RequestMapping("/user")
public class UserController{
    
    /**
     * <p>
     * 用户列表接口
     * </p>
     * 
     * @param parameter 参数为一个json的字符串
     * @param request
     * @param response
     */
    @RequestMapping(value = "/list")
    public void userList(String parameter, HttpServletRequest request, HttpServletResponse response){
        //相关接口处理
    }
}

我现在想在请求这个接口时候,找到这个接口的方法位置
如我请求:/user/list 接口,在返回的json中,增加返回这个方法的位置:
com.xxx.controller.UserController.userList
或者
com.xxx.controller.UserController

如返回中增加一个location:

{
    "location":"com.xxx.controller.UserController.userList",
    "data":"my data",
    "code":"200"
}

有没有比较好的实现方法

补充:
我现在最大的问题就是找不到接口所在的类和包,我想通过外部的请求知道处理这个请求的类和方法在哪里。

如果在处理请求时,出现了异常(项目接口直接就404了我也是醉了),也没办法好的找到方法所在位置。

阅读 4k
3 个回答

spring aop 拦截controller中所有方法
可以在方法执行完成后做些东西,比如在控制台打印类名和方法名

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class PrintInterfaceNameAspect {

    @AfterReturning(value = "execution(* com.demo.web.controller..*(..))")  //替换成你自己的controller包名
    public void afterReturnAdvice(JoinPoint point) {
        //类名
        System.out.println(point.getSignature().getDeclaringTypeName());
        //方法名
        System.out.println(point.getSignature().getName());
    }
}

用aop 切面

@Pointcut("execution(* com.xxx.controller.*(..))")

将当前的包名和方法名拼接set到返回实体中的location字段。

楼上两位都是用aop实现的,但是我看你只是想找接口的位置,你完全可以快捷键全局搜索,很快的。

如图clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题