SpringBoot请求是如何找到写的Controller的,并且在什么时候如何调用controller中的方法
时间: 2024-04-07 09:27:43 浏览: 21
在Spring Boot中,请求是由DispatcherServlet处理的,DispatcherServlet会根据请求的URL路径找到对应的HandlerMapping(处理器映射器),然后将处理权交给对应的Controller类和方法。具体来说,Spring Boot会在启动时扫描所有的@Controller注解和@RequestMapping注解,并将它们注册到HandlerMapping中。
当请求到来时,DispatcherServlet会根据请求的URL路径和请求方法选择对应的HandlerMapping,然后调用Controller类的方法来处理请求。在调用Controller方法之前,Spring Boot会根据请求中的参数类型和注解等信息,将请求参数绑定到Controller方法的参数中。
Controller方法的返回值可以是一个ModelAndView对象,也可以是其他对象。如果返回的是ModelAndView对象,DispatcherServlet会将这个对象传递给ViewResolver来选择对应的View进行渲染。如果返回的是其他对象,Spring Boot会将这个对象转换成JSON格式或其他格式的响应返回给客户端。
总之,在Spring Boot中,请求是由DispatcherServlet处理的,它会根据请求的URL路径和请求方法选择对应的HandlerMapping和Controller方法,然后将请求参数绑定到Controller方法的参数中,并最终将Controller方法的返回值转换成响应格式返回给客户端。
相关问题
SpringBoot请求是如何找到写的Controller的
在SpringBoot中,请求是通过DispatcherServlet来处理的。DispatcherServlet会根据请求的URL路径找到对应的HandlerMapping(处理器映射器),HandlerMapping会根据请求的URL路径找到对应的Controller类和方法。具体来说,SpringBoot会在启动时扫描所有的@Controller注解和@RequestMapping注解,并将它们注册到HandlerMapping中。当请求到来时,DispatcherServlet会根据请求的URL路径和请求方法选择对应的HandlerMapping,然后调用Controller类的方法来处理请求。最终,Controller方法会返回一个ModelAndView对象,DispatcherServlet会根据这个对象选择对应的View来渲染响应。
springboot 怎么在mapper中获取调用的controller方法名
答:在Mapper中获取调用的Controller方法名可以通过AOP拦截器实现。具体操作步骤如下:
1. 定义一个切面类,在该类中定义一个@Before注解的方法,用于拦截Controller层的请求。
2. 在该方法中调用Thread.currentThread().getStackTrace()方法,获取方法调用栈,并通过反射获取Controller方法名。
3. 将Controller方法名添加进Mapper方法的参数中,以便在Mapper中进行调用。
4. 在springboot的配置文件中配置该拦截器即可。
下面是一个简单的示例代码:
```
@Aspect
@Component
public class MapperAspect {
@Before("execution(* com.example.demo.controller..*(..))")
public void before(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
String controllerMethodName = className + "." + methodName;
MapperParam.setControllerMethodName(controllerMethodName);
}
}
```
```
public class MapperParam {
private static ThreadLocal<String> controllerMethodName = new ThreadLocal<>();
public static String getControllerMethodName() {
return controllerMethodName.get();
}
public static void setControllerMethodName(String methodName) {
controllerMethodName.set(methodName);
}
}
```
在Mapper接口中添加参数,并在xml文件中调用即可:
```
public interface UserMapper {
User selectUserById(@Param("id") Integer id, @Param("controllerMethodName") String controllerMethodName);
}
```
```
<select id="selectUserById" resultType="com.example.demo.entity.User">
select * from user where id = #{id} and create_by = #{controllerMethodName}
</select>
```
注意,以上示例代码仅为演示目的,需要根据实际业务进行适当的修改和完善。