在日常的开发中,我们一般是通过@RequestMapping等注解标注在方法上来创建一个对外的接口,SpringMVC会扫描这些注解来创建 RequestMappingInfo
对象交由 RequestMappingHandlerMappng
处理。
我们可以通过手动创建RequestMappingInfo的方式动态的注册和销毁接口
- 先创建接口类
public class Test2Controller {
@ResponseBody
public String test(@RequestHeader(required = false) Map<String,String>header,
@RequestParam(required = false) Map<String,String> param,
@RequestBody(required = false) Map<String,String> body){
System.out.println("success");
return "success";
}
}
- 编写配置类注册接口
@Slf4j
@Configuration
public class AutoRegisterRequestMappingConfig implements CommandLineRunner {
@Autowired
private RequestMappingHandlerMapping requestMappingHandlerMapping;
@Override
public void run(String... args) throws Exception {
log.info("动态注册requestMapper");
RequestMappingInfo.BuilderConfiguration config = new RequestMappingInfo.BuilderConfiguration();
config.setPatternParser(handlerMapping.getPatternParser());
RequestMappingInfo requestMappingInfo = RequestMappingInfo
.paths("/test")
.methods(RequestMethod.POST)
.consumes(MediaType.APPLICATION_JSON_VALUE)
.options(config)
.build();
requestMappingHandlerMapping.registerMapping(requestMappingInfo, Test2Controller.class, ReflectUtil.getMethodByName(Test2Controller.class,"test"));
//注销接口
//requestMappingHandlerMapping.unregisterMapping( requestMappingInfo );
//获取所有的handler
Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();
}
}
- 如果是高版本的SpringBoot 需要添加配置
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER