Springboot如何动态注册处理请求接口?这个知识点你值得了解一下

环境:springboot2.2.10.RELEASE

十余年的襄城网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整襄城建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“襄城网站设计”,“襄城网站推广”以来,每个客户项目都认真落实执行。

编写一个准备用来出来请求的方法

 
 
 
 
  1. @Service
  2. public class UserHandler {
  3.   @ResponseBody
  4.   public Object getUsers(@PathVariable("id") String id, HttpServletRequest request) {
  5.     System.out.println(request) ;
  6.     return "查询用户ID为: " + id ;
  7.   }
  8.     
  9. }

你的处理程序可以不是受容器管理的Bean。这里还应用了SpringMVC相关的一些注解,这些注解都可以像Controller中使用一样。

注册接口处理程序

 
 
 
 
  1. @Configuration
  2. public class MappingConfig {
  3.     
  4.   @Autowired
  5.   public void setHandlerMapping(RequestMappingHandlerMapping mapping, UserHandler handler) throws NoSuchMethodException {
  6.     RequestMappingInfo info = RequestMappingInfo.paths("/users/{id}").methods(RequestMethod.GET).build();
  7.     Method method = UserHandler.class.getMethod("getUsers", String.class, HttpServletRequest.class);
  8.     mapping.registerMapping(info, handler, method);
  9.   }
  10. }
  1. 创建RequestMappingInfo对象,就是一些请求的基本元信息。
  2. 获取处理程序的方法对象。
  3. 通过RequestMappingHandlerMapping注册请求映射对象。

Spring容器在启动过程中会将所有的Controller处理接口方法都包装成RequestMappingInfo对象然后添加到

RequestMappingHandlerMapping对象的一个集合中。

注:容器默认有很多个HandlerMapping对象,具体该如何处理初始化那些类接口是通过

AbstractHandlerMethodMapping#isHandler决定,该方法是个抽象方法具体是由子类来实现的。

 
 
 
 
  1. public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMapping implements InitializingBean {
  2.   protected abstract boolean isHandler(Class beanType);
  3. }

RequestMappingHandlerMapping是AbstractHandlerMethodMapping的子类看看它的实现:

 
 
 
 
  1. public class RequestMappingHandlerMapping {
  2.   @Override
  3.   protected boolean isHandler(Class beanType) {
  4.     return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) || 
  5.             AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class));
  6.   }
  7. }

这里判断了当前Bean对象上是否有@Controller注解或者@RequestMapping对象;也就是在容器启动后会将所有的Controller中的接口方法保证注册为RequstMappingInfo对象。

在SpringMVC处理一个请求的过程中,有一个流程是取得相应的HandlerMapping对象。

处理方法参数

处理程序能够接收那些参数?

JDK 8的java.util.Optional作为方法参数与注释相结合受到支持具有必需属性(例如@RequestParam、@RequestHeader和其他属性)且等效于required=false。

处理方法返回值

当前题目:Springboot如何动态注册处理请求接口?这个知识点你值得了解一下
转载来源:http://www.zyruijie.cn/qtweb/news25/12425.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联