文章目录
- 1.将方法的request和response参数封装到参数数组
- 1.SunDispatcherServlet.java
-
- 2.测试
- 2.封装Http请求参数到参数数组
- 1.自定义@RequestParam注解
- 2.MonsterController.java 增加参数
- 3.SunDispatcherServlet.java
- 1.resolveMethodArguments 根据方法信息,返回实参列表
- 2.测试
1.将方法的request和response参数封装到参数数组
1.SunDispatcherServlet.java
1.根据方法信息,返回实参列表
private Object[] resolveMethodArguments(HttpServletRequest request, HttpServletResponse response, Method method) {Class<?>[] parameterTypes = method.getParameterTypes();Object[] args = new Object[parameterTypes.length];for (int i = 0; i < parameterTypes.length; i++) {Class<?> parameterType = parameterTypes[i];if (parameterType == HttpServletRequest.class) {args[i] = request;} else if (parameterType == HttpServletResponse.class) {args[i] = response;} else {}}return args;}
2.具体调用
2.测试
2.封装Http请求参数到参数数组
1.自定义@RequestParam注解
package com.sunxiansheng.springmvc.annotation;import java.lang.annotation.*;
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.PARAMETER)
@Documented
public @interface RequestParam {String name() default "";}
2.MonsterController.java 增加参数
3.SunDispatcherServlet.java
1.resolveMethodArguments 根据方法信息,返回实参列表
private Object[] resolveMethodArguments(HttpServletRequest request, HttpServletResponse response, Method method) {Class<?>[] parameterTypes = method.getParameterTypes();Object[] args = new Object[parameterTypes.length];for (int i = 0; i < parameterTypes.length; i++) {Class<?> parameterType = parameterTypes[i];if (parameterType == HttpServletRequest.class) {args[i] = request;} else if (parameterType == HttpServletResponse.class) {args[i] = response;} else {if (method.getParameters()[i].isAnnotationPresent(RequestParam.class)) {String parameterName = method.getParameters()[i].getAnnotation(RequestParam.class).name();String parameter = request.getParameter(parameterName);args[i] = parameter;} else {String parameterName = method.getParameters()[i].getName();String parameter = request.getParameter(parameterName);if (parameter == null || parameter.isEmpty()) {log.error("参数名匹配失败:{}", parameter);}args[i] = parameter;}}}int count = 0;for (Object arg : args) {if (arg != null) {count++;}}if (count != parameterTypes.length) {throw new RuntimeException("参数个数不匹配");}return args;}
2.测试