package com.example.server.util;
import com.example.server.util.TypeUtils;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
public class ObjectUtil {
public static Object getObjectByRequest(Class<?> clazz, HttpServletRequest request) throws ClassNotFoundException, ParameterError {
Object entity = null;
try{
entity = clazz.getDeclaredConstructor().newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String value = request.getParameter(field.getName());
if(value==null){
continue;
}
String filedName = field.getName();
Class<?> filedType = field.getType();
String setterName = "set"+ StringUtils.capitalize(filedName);
Method setterMethod;
try {
setterMethod = clazz.getMethod(setterName,filedType);
} catch (NoSuchMethodException e) {
setterMethod = null;
e.printStackTrace();
}
if(setterMethod==null){
continue;
}
setterMethod.invoke(entity, TypeUtils.stringToTarget(value,filedType));
}
} catch (Exception e) {
e.printStackTrace();
throw new ParameterError("request参数错误,无法获得对应实例类");
}
return entity;
}
public static class ParameterError extends Exception{
private String message;
public ParameterError(String message){
super(message);
this.message = message;
}
}
}
使用:
User user = (User) ObjectUtil.getObjectByRequest(User.class,request);
User:
@Data
@TableName("s_user")
public class User{
public static final String ROLE_STUDENT = "student";
public static final String ROLE_TEACHER = "teacher";
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
private String loginName;
private String password;
private String role;
private String name;
}
Url(post也可以)