SpringMVC--高级操作
原文网址:SpringMVC—高级操作_IT利刃出鞘的博客-CSDN博客
获得所有接口信息
简介
可以通过获得RequestMappingHandlerMapping.class的bean,然后通过其getHandlerMethods()获得所有接口。
示例
控制器
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping("/test1")
public String test1() {
return "hello";
}
@GetMapping("/test2")
public String test2() {
return "hehe";
}
}
获得接口
package com.example.config;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import org.springframework.beans.BeansException;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.util.Map;
@Component
public class ApplicationContextTest implements ApplicationContextAware, ApplicationRunner {
private ApplicationContext applicationContext;
RequestMappingHandlerMapping handlerMapping;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public void run(ApplicationArguments args) throws Exception {
handlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
}
}
在此代码最后一行打断点,运行之后在“Evaluate Expression”输入:handlerMapping.getHandlerMethods();
查看其中的某一项,比如:/hello/test1
注:本处我本来想用Fastjson将handleMethods打印出来,但报错了,需进一步确定报错原因。
报错日志:
Caused by: java.lang.IllegalStateException: Cannot retrieve Parameter descriptor for method return type
at org.springframework.core.MethodParameter.getParameter(MethodParameter.java:251) ~[spring-core-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:689) ~[jackson-databind-2.11.0.jar:2.11.0]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:723) ~[jackson-databind-2.11.0.jar:2.11.0]
... 63 common frames omitted
还没有评论,来说两句吧...