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

导读:本篇文章讲解 Springboot如何动态注册处理请求接口?这个知识点你值得了解一下,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

环境:springboot2.2.10.RELEASE


  • 编写一个准备用来出来请求的方法
@Service
public class UserHandler {

  @ResponseBody
  public Object getUsers(@PathVariable("id") String id, HttpServletRequest request) {
    System.out.println(request) ;
    return "查询用户ID为: " + id ;
  }
	
}

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

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

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

注:容器默认有很多个HandlerMapping对象,具体该如何处理初始化那些类接口是通过
AbstractHandlerMethodMapping#isHandler决定,该方法是个抽象方法具体是由子类来实现的。

public abstract class AbstractHandlerMethodMapping<T> extends AbstractHandlerMapping implements InitializingBean {
  protected abstract boolean isHandler(Class<?> beanType);
}

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

public class RequestMappingHandlerMapping {
  @Override
  protected boolean isHandler(Class<?> beanType) {
    return (AnnotatedElementUtils.hasAnnotation(beanType, Controller.class) || 
            AnnotatedElementUtils.hasAnnotation(beanType, RequestMapping.class));
  }
}

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

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

  • 处理方法参数

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

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

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

  • 处理方法返回值

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

完毕!!!

公众:Springboot实战案例锦集

图片

 

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79991.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!