SpringMVC--高级操作

Love The Way You Lie 2022-12-19 06:13 225阅读 0赞

原文网址:SpringMVC—高级操作_IT利刃出鞘的博客-CSDN博客

获得所有接口信息

简介

可以通过获得RequestMappingHandlerMapping.class的bean,然后通过其getHandlerMethods()获得所有接口。

示例

控制器

  1. package com.example.controller;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. @RestController
  6. @RequestMapping("/hello")
  7. public class HelloController {
  8. @GetMapping("/test1")
  9. public String test1() {
  10. return "hello";
  11. }
  12. @GetMapping("/test2")
  13. public String test2() {
  14. return "hehe";
  15. }
  16. }

获得接口

  1. package com.example.config;
  2. import com.alibaba.fastjson.JSON;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.fasterxml.jackson.databind.json.JsonMapper;
  5. import org.springframework.beans.BeansException;
  6. import org.springframework.boot.ApplicationArguments;
  7. import org.springframework.boot.ApplicationRunner;
  8. import org.springframework.context.ApplicationContext;
  9. import org.springframework.context.ApplicationContextAware;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.web.method.HandlerMethod;
  12. import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
  13. import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
  14. import java.util.Map;
  15. @Component
  16. public class ApplicationContextTest implements ApplicationContextAware, ApplicationRunner {
  17. private ApplicationContext applicationContext;
  18. RequestMappingHandlerMapping handlerMapping;
  19. @Override
  20. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  21. this.applicationContext = applicationContext;
  22. }
  23. @Override
  24. public void run(ApplicationArguments args) throws Exception {
  25. handlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
  26. Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
  27. }
  28. }

在此代码最后一行打断点,运行之后在“Evaluate Expression”输入:handlerMapping.getHandlerMethods();

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaXlpbmcwY2FuZ2xhbmc_size_16_color_FFFFFF_t_70

查看其中的某一项,比如:/hello/test1

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaXlpbmcwY2FuZ2xhbmc_size_16_color_FFFFFF_t_70 1

注:本处我本来想用Fastjson将handleMethods打印出来,但报错了,需进一步确定报错原因。
报错日志:

  1. Caused by: java.lang.IllegalStateException: Cannot retrieve Parameter descriptor for method return type
  2. at org.springframework.core.MethodParameter.getParameter(MethodParameter.java:251) ~[spring-core-5.2.6.RELEASE.jar:5.2.6.RELEASE]
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201]
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201]
  6. at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201]
  7. at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:689) ~[jackson-databind-2.11.0.jar:2.11.0]
  8. at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:723) ~[jackson-databind-2.11.0.jar:2.11.0]
  9. ... 63 common frames omitted

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读