原生java如何接受get请求指定的参数?代码写出来 注意 不能使用HttpServletRequest类库
如果不能使用HttpServletRequest类库,那么可以使用Java的反射机制来获取参数。具体步骤如下:
-
获取请求的URL,并解析出其中的参数。
-
获取当前类的所有方法,找到与请求URL对应的方法。
-
获取该方法的参数列表,并根据参数类型获取请求参数的值。
-
将请求参数的值转换为方法参数类型,并调用该方法。
下面是一个示例代码:
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拼接成字符串返回。
原文地址: https://www.cveoy.top/t/topic/bIsS 著作权归作者所有。请勿转载和采集!