写之前不知道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中获取参数的小框架~的更多相关文章

  1. JSP userBean setProperty直接从request中获取参数

    JSP userBean setProperty直接从request中获取参数: form表单Jsp: <%@ page language="java" import=&qu ...

  2. java获取request中的参数、java解析URL问号后的参数

    java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...

  3. pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等

    pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表 ...

  4. Java POJO类直接存储在MongoDB中

    记录Java POJO类直接存储在MongoDB中的策略. maven: <dependency> <groupId>org.mongodb</groupId> & ...

  5. 使用JavaScript获取url(request)中的参数

    这次是使用JavaScript来获取url(request)中的参数 在日常页面编写的过程中为了方便操作在<script>中通过使用window.location.href="要 ...

  6. 通过反射将request中的参数封装到对象中

    import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.text.SimpleDateFo ...

  7. 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件

    代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...

  8. setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位

    setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位

  9. Flask request接口获取参数

    Flask request接口获取参数   request.form.get("key", type=str, default=None) 获取表单数据, request.args ...

随机推荐

  1. shell脚本交互:expect学习笔记及实例详解

    最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. ...

  2. 微信小程序 瀑布流布局

    今天做小程序的时候,碰到一个比较常见的需求,就是要瀑布流布局,两列,交错分布,大概如下图 最终要实现的结果就是如左图所示. 不过在微信小程序里面,不能通过JavaScript来直接操作dome,所以一 ...

  3. Longest Palindromic Substring - 字符串中最长的回文字段

    需求:Given a string S, find the longest palindromic substring in S. You may assume that the maximum le ...

  4. VerilogHDL概述与数字IC设计流程学习笔记

    一.HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言.那么什么是硬件描述语言呢?为什么不叫硬件设计语言呢?硬件描述语言,顾名思义就是 ...

  5. 导航栏使用UIButton自定义返回按钮的图片

    - (void)viewDidLoad { UIButton *backItem = [UIButton buttonWithType:UIButtonTypeCustom]; UIBarButton ...

  6. ReentrantLock实现原理及源码分析

    ReentrantLock是Java并发包中提供的一个可重入的互斥锁.ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性.只不过相比原生的Sync ...

  7. ETL作业调度软件TASKCTL4.1集群部署

    熟悉TASKCTL4.1一段时间后,觉得它的调度逻辑什么的都还不错,但是感觉单机部署不太够用.想实现跨机调度作业,就要会TASKCTL的集群部署.下面就是我在网上找到的相关资料,非原创. 单机部署成功 ...

  8. sping 框架学习之——初始篇

    sping框架学习: 1,什么是spring框架 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以 ...

  9. 超强、超详细Redis数据库入门教程(转载)

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下   [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...

  10. HDOJ 6069 素数筛法(数学)

    Counting Divisors Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Oth ...