MENU

springboot/springmvc 动态添加接口

May 17, 2021 • Read: 2188 • 学习·笔记

  • TargetController.java

存在一个 foo 接口的 TargetController,该接口最初不可以被访问,后将被动态注册入 mvc 容器

动态注入的 foo 接口的 uri 路径为 /test/foo ,method 为 post , 返回一个 Foo JSON

public class TargetController {

    public static class Foo{
        private String name="foo";
        public String getName(){return name;}
    }

    @ResponseBody
    public Foo foo() {
        return new Foo();
    }
}
  • TestController.java

动态注册,让 foo 接口动态注入入 mvc 容器

@RestController
@RequestMapping("/test")
public class TestController{
    @PostMapping("/addFooApi")
    public String dynamicRegistFoo() throws NoSuchMethodException {

        RequestMappingInfo build = RequestMappingInfo.paths("/test/foo")
                .methods(RequestMethod.POST)
                .consumes(MediaType.APPLICATION_JSON_VALUE)
                .produces(MediaType.APPLICATION_JSON_VALUE)
                .build();
        Method meth = TargetController.class.getMethod("foo");
        // SpringContextUtil 是封装好实现了 ApplicationContextAware 接口的从 spring 上下文中获取实例的工具类
        // 此处不写该类实现
        RequestMappingHandlerMapping handlerMapping = SpringContextUtil.getBean(RequestMappingHandlerMapping.class);
        handlerMapping.registerMapping(build, new TargetController(), meth);
        return "OK";
    }
}
  • 测试

启动 Application , 访问 /test/foo ,接口返回 404,后访问 /test/addFooApi 动态注册接口,返回 OK,再访问 /test/foo ,接口返回 {"name":"foo"},代表动态注册接口成功

  • 参考

RequestMappingHandlerMapping registerMapping not binding with RequestBody / HttpEntity


本文由 ONE 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
如有版权疑问交流,请给我留言:oneisall8955@gmail.com
本文永久链接:https://liuzhicong.cn/index.php/study/springboot-dynamic-add-api.html

Archives QR Code Tip
QR Code for this page
Tipping QR Code