如果不能使用HttpServletRequest类库,那么可以使用Java的反射机制来获取参数。具体步骤如下:

  1. 获取请求的URL,并解析出其中的参数。

  2. 获取当前类的所有方法,找到与请求URL对应的方法。

  3. 获取该方法的参数列表,并根据参数类型获取请求参数的值。

  4. 将请求参数的值转换为方法参数类型,并调用该方法。

下面是一个示例代码:

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        String url = "http://localhost:8080/user?id=123&name=Tom";
        Map<String, String> params = parseParams(url);
        String methodName = "getUser";
        Class<?> clazz = Class.forName("UserDao");
        Object instance = clazz.newInstance();
        Method method = findMethod(clazz, methodName);
        Object[] argsArray = getArgs(method, params);
        Object result = method.invoke(instance, argsArray);
        System.out.println(result);
    }

    private static Map<String, String> parseParams(String url) {
        Map<String, String> params = new HashMap<>();
        int index = url.indexOf("?");
        if (index != -1) {
            String query = url.substring(index + 1);
            String[] pairs = query.split("&");
            for (String pair : pairs) {
                String[] parts = pair.split("=");
                if (parts.length == 2) {
                    params.put(parts[0], parts[1]);
                }
            }
        }
        return params;
    }

    private static Method findMethod(Class<?> clazz, String methodName) {
        for (Method method : clazz.getDeclaredMethods()) {
            if (method.getName().equals(methodName)) {
                return method;
            }
        }
        return null;
    }

    private static Object[] getArgs(Method method, Map<String, String> params) {
        Class<?>[] parameterTypes = method.getParameterTypes();
        Object[] args = new Object[parameterTypes.length];
        for (int i = 0; i < parameterTypes.length; i++) {
            Class<?> parameterType = parameterTypes[i];
            String paramName = parameterType.getSimpleName().toLowerCase();
            String paramValue = params.get(paramName);
            args[i] = convertValue(paramValue, parameterType);
        }
        return args;
    }

    private static Object convertValue(String value, Class<?> type) {
        if (type == int.class || type == Integer.class) {
            return Integer.parseInt(value);
        } else if (type == String.class) {
            return value;
        } else {
            throw new IllegalArgumentException("Unsupported parameter type: " + type);
        }
    }
}

class UserDao {
    public String getUser(int id, String name) {
        return "User{id=" + id + ", name='" + name + "'}";
    }
}

这里假设请求的URL为"http://localhost:8080/user?id=123&name=Tom",需要调用UserDao类的getUser方法,并传入id和name参数。在Main类中,首先解析出参数并保存到params变量中,然后通过反射获取UserDao类的实例,并找到getUser方法。接下来,根据getUser方法的参数类型从params中获取参数值,并转换为对应的类型。最后,调用getUser方法并打印返回值。在getUser方法中,只是简单地将id和name拼接成字符串返回。

原生java如何接受get请求指定的参数?代码写出来 注意 不能使用HttpServletRequest类库

原文地址: https://www.cveoy.top/t/topic/bIsS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录