一个利用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 ...
随机推荐
- 输入3个数a,b,c,按大小顺序输出
题目:输入3个数a,b,c,按大小顺序输出 package com.li.FiftyAlgorthm; import java.util.Scanner; /** * 题目:输入3个数a,b,c,按大 ...
- Accord.NET_Naive Bayes Classifier
我们这个系列主要为了了解并会使用Accord.NET中机器学习有关算法,因此主要关注的是算法针对的的问题,算法的使用.所以主要以代码为主,通过代码来学习,在脑海中形成一个轮廓.下面就言归正传,开始贝叶 ...
- swift3.0 基础练习-实现99乘法表
用的方法比较笨 大致效果是这样 思路: 第一行 拼接一次 第二行 拼接二次 ... 第九行 拼接九次 //num控制个数 var num = 1 //result为结果 var result = &q ...
- 阿里聚安全移动安全专家分享:APP渠道推广作弊攻防那些事儿
移动互联网高速发展,要保持APP持续并且高速增长所需的成本也越来越高.美团网CEO在今年的一次公开会议上讲到:"2017年对移动互联网公司来说是非常恐的.".主要表现在三个方面,手 ...
- python3网络编程之socketserver
本节主要是讲解python3网络编程之socketserver,在上一节中我们讲到了socket.由于socket无法支持多用户和多并发,于是就有了socket server. socket serv ...
- Java工程师书单(初级、中级、高级)
简介 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题 ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
- [Tyvj模拟赛]运
运 题目 [问题背景]zhx 和妹子们玩数数游戏. [问题描述] 仅包含4或7的数被称为幸运数.一个序列的子序列被定义为从序列中删去若干个数, 剩下的数组成的新序列.两个子序列被定义为不同的当且仅当其 ...
- 19. leetcode 100. Same Tree
Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...
- 利用AD采集获取外部温度传感器的值
#include "led.h" #include "delay.h" #include "key.h" #include "sy ...