springboot如何动态添加controller层的getmapping映射?
在 Spring Boot 中,可以使用 Spring 的
RequestMappingHandlerMapping来动态添加@GetMapping映射,以下是具体步骤:注入 RequestMappingHandlerMapping
首先,需要在相关的类中注入
RequestMappingHandlerMapping,它负责处理请求映射。示例代码如下:
java
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class DynamicMappingHandler {
@Autowired
private RequestMappingHandlerMapping requestMappingHandlerMapping;
}
创建处理方法
创建一个用于处理请求的方法,该方法将作为动态添加的
@GetMapping映射的处理逻辑。示例代码如下:
java
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
@Component
public class DynamicMappingHandler {
@Autowired
private RequestMappingHandlerMapping requestMappingHandlerMapping;
// 处理动态映射的方法
@ResponseBody
public ResponseEntity<String> dynamicMappingHandler() {
return new ResponseEntity<>("This is a dynamic mapping response", HttpStatus.OK);
}
}
动态添加映射
使用
RequestMappingHandlerMapping的registerMapping方法来动态添加@GetMapping映射。示例代码如下:
java
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
@Component
public class DynamicMappingHandler {
@Autowired
private RequestMappingHandlerMapping requestMappingHandlerMapping;
// 处理动态映射的方法
@ResponseBody
public ResponseEntity<String> dynamicMappingHandler() {
return new ResponseEntity<>("This is a dynamic mapping response", HttpStatus.OK);
}
// 动态添加映射
@PostConstruct
public void addDynamicMapping() {
// 创建RequestMappingInfo
RequestMappingInfo requestMappingInfo = RequestMappingInfo
.paths("/dynamic")
.methods(RequestMethod.GET)
.build();
// 注册映射
requestMappingHandlerMapping.registerMapping(requestMappingInfo, this, "dynamicMappingHandler");
}
}
在上述代码中,
@PostConstruct注解的方法在 Bean 初始化后会被调用,在这个方法中,首先创建了一个RequestMappingInfo对象,它定义了请求的路径/dynamic和请求方法GET,然后使用registerMapping方法将这个映射注册到RequestMappingHandlerMapping中,关联到dynamicMappingHandler方法。
摘抄自网络,便于检索查找。

浙公网安备 33010602011771号