一个利用pojo类从前端页面request中获取参数的小框架~
写之前不知道Spring已经实现这样的功能,所以傻傻的写了这个东西!
实现原理挺有趣的在此记录一下。从去年十月参加java开发以来自己终于有了点小进步。
好开心。
解决问题(详解):前端form表单提交过程中我们需要多次从前端获取各个参数。这样不效率,而表单提交过程中的内容绝大多数与pojo类重合,因此我就构想能不能利用pojo类来灵活接收前端信息,在简化代码的同时,让项目更加对象化。
主要功能:利用pojo类信息接收前端传入的表单信息避免书写代码过多繁杂影响效率。
代码入下。因为用了公司的内部一些框架所以替换成了
value=(Integer)request.getAttribute(fieldName)这类东西!应该不影响使用与阅读
package org.hyena.contract.util; import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; public class GetUtil { public <T> T getType(Class<T> classes, HttpServletRequest request){
T t=classFactiory(classes);
t=builder(t,request);
return t; } private <T> T builder(T t, HttpServletRequest request){
Class classes=t.getClass();
Field[] fields=(Field[]) classes.getDeclaredFields();
Method[] methods = classes.getDeclaredMethods();
String methonName="";
String TypeName="";
String fieldName=""; Object value=null;
for(Field f:fields){
methonName="set"+f.getName();
//取值
TypeName=f.getType().getSimpleName();
fieldName=f.getName();
if(TypeName.equals("Integer")||TypeName.equals("int")){
value=(Integer)request.getAttribute(fieldName);
}else if(TypeName.equals("Integer[]")||TypeName.equals("int[]")){
value=(Integer[])request.getAttribute(fieldName);
}else if(TypeName.equals("Double")||TypeName.equals("double")){
value=(Double)request.getAttribute(fieldName);
}else if(TypeName.equals("Double[]")||TypeName.equals("double[]")){
value=(Double[])request.getAttribute(fieldName);
}else if(TypeName.equals("String")||TypeName.equals("char")){
value=(String)request.getAttribute(fieldName);
}else if(TypeName.equals("String[]")||TypeName.equals("char[]")){
value=(String[])request.getAttribute(fieldName);
}
for(Method m:methods){
if(m.getName().toLowerCase().contains(methonName.toLowerCase())){
//插入值
try {
m.invoke(t,value);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return t;
} /**
* 判断是否存在某属性的 set方法
*
* @param methods
* @param fieldSetMet
* @return boolean
*/
private boolean checkSetMet(Method[] methods, String fieldSetMet) {
for (Method met : methods) {
if (fieldSetMet.equals(met.getName())) {
return true;
}
}
return false;
}
/**
* @function 工厂类反射创造对象
* @param c
* @return
*/
private <T> T classFactiory(Class<T> c){
T t=null;
try {
t=c.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return t;
}
}
功能并不是太完善太美好,只是作为一个自己的纪念,还有就是有兴趣的玩一玩。
希望大家善待萌新不要太打击~~~~~~~~~~~
这个工具类的结构详解:
传入参数:pojo类对象,request请求。
结构:
1利用类对象创建实例。
2获取类对象的属性数组与方法数组
3遍历类对象属性,并确定存在set方法。根据属性从前端传入request中获取属性名参数值
3.1在遍历方法数组获取set方法把之前求的参数值放入对象中
4返回已经赋值完全的对象
一个利用pojo类从前端页面request中获取参数的小框架~的更多相关文章
- JSP userBean setProperty直接从request中获取参数
JSP userBean setProperty直接从request中获取参数: form表单Jsp: <%@ page language="java" import=&qu ...
- java获取request中的参数、java解析URL问号后的参数
java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...
- pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等
pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表 ...
- Java POJO类直接存储在MongoDB中
记录Java POJO类直接存储在MongoDB中的策略. maven: <dependency> <groupId>org.mongodb</groupId> & ...
- 使用JavaScript获取url(request)中的参数
这次是使用JavaScript来获取url(request)中的参数 在日常页面编写的过程中为了方便操作在<script>中通过使用window.location.href="要 ...
- 通过反射将request中的参数封装到对象中
import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.text.SimpleDateFo ...
- 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件
代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...
- setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位
setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位
- Flask request接口获取参数
Flask request接口获取参数 request.form.get("key", type=str, default=None) 获取表单数据, request.args ...
随机推荐
- 使用JavaScript开发跨平台的桌面应用
任何可以使用JavaScript来编写的应用,最终会由JavaScript编写.--Atwood定律 Atwood's Law是Jeff Atwood在2007年提出的:"any appli ...
- 一步一步学Vue(七)
前言:我以后在文章最后再也不说我下篇博文要写什么,之前说的大家也可以忽略,如果你不忽略,会失望的
- ural 1989 subplindromes
https://vjudge.net/problem/URAL-1989 题意: 先给出一个字符串,对于这个字符串,有两种操作,一种是询问从下标x到y的串是不是回文串,另一种是将下标为pos的字符改为 ...
- 安装j2ee开发环境
先安装jdk,再安装eclipse ,再安装myeclipse. eclipse与myeclipse必须在图形化界面安装. 1. 挂载光驱/硬盘 mount /mnt/cdrom/ 挂载光驱 ...
- 从零自学Hadoop(24):Impala相关操作上
阅读目录 序 数据库相关 表相关 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- OVS故障处理一例
OVS下无法访问内部网站 遇到朋友求助的一个客户问题,环境是这样的,客户在自己的iaas平台(不是openstack)上使用ovs,物理交换机上配置vlan和dhcp service,计算节点的ovs ...
- openstack中使用linux_bridge实现vxlan网络
openstack环境: 1 版本:ocata 2 系统:ubuntu16.04.2 3 控制节点 1个 + 计算节点 1个 4 控制节点网卡为ens33,ip = 172.171.5.200 ens ...
- Spring事务管理的另一种方式--TransactionTemplate编程式事务管理简单入门
1, 一直以来, 在用Spring进行事物管理时, 只知道用声明式的策略, 即根据不同的数据源, 配置一个事物管理器(TransactionManager), 通过配置切面(PointCut)应用到相 ...
- ios 监听TextField中内容
@property (weak, nonatomic) IBOutlet UITextField *UserID; @property (weak, nonatomic) IBOutlet UITex ...
- vue指令v-show示例解析
v-show控制元素显示或者隐藏: <div id="app"> <p v-show="isShow">this is a messag ...