com.j2mvc.framework.dispatcher.reader.FormDataReader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of j2mvc-framework-web Show documentation
Show all versions of j2mvc-framework-web Show documentation
强烈建议使用J2mvc 2.1以后的版本。
version 2.1.01
1.优化路径跳转,Servlet和Filter方式的路径设置
2.优化内存销毁
3.更换JSON依赖包
4.优化接收方法RequestMethod,封装不同ContentType格式提交
封装JSON,XML数据提交模块
JSON请求示例
{
"id":"JSON134851",
"title":"JSON提交的标题",
"price":65.1,
"stock":100
}
XML请求示例
<!DOCTYPE root [
<!ELEMENT root ANY>
<!ATTLIST Product SSN ID #REQUIRED>]>
<root>
<Product SSN='id'>XMLID12354</Product>
<Product SSN='title'>XML提交的标题 </Product>
<Product SSN='price'>55 </Product>
<Product SSN='stock'>32 </Product>
</root>
version 2.1.02
1.解决URL无后缀情况无法加载静态资源,解决无法渲染CSS文件。
version 2.1.03
1.移除com.j2mvc.StringUtils.getUtf8()方法调用
更改为getCharset()
version 2.1.04
1.去除Servlet和Filter的全局变量销毁,只交给Listener处理。
version 2.1.05,2.1.06,2.1.07
1.完善POST提交的JSON数据
支持接收基础数据类型、任意对象类型、任意数组类型。
不支持接收参数为集合类型或Map类型,但可以定义为接收对象类型的元素。
version 2.1.05,2.1.06,2.1.07
1.修改连接池变量
version 2.1.09
增加上传功能,修改RequestMethod,ContentType设置方式
version 2.1.10,2.1.11
更改上传文件名格式为UUID格式,移除JSON映射类,更改接收多文件上传。
version 2.1.12
删除文件列有的空对象
version 2.1.13
增加配置文件目录/conf,加载上传功能配置/conf/upload.properties
version 2.1.18
拦截器也能获取ActionBean
version 2.1.20
添加上传文件只读权限
version 2.1.21
支持同时接收文件和文本数据
version 2.1.22
增加文件接收类型media
version 2.1.23
删除upload类printJson方法
The newest version!
package com.j2mvc.framework.dispatcher.reader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Time;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import com.j2mvc.framework.Constants;
import com.j2mvc.framework.util.InvokeUtils;
import com.j2mvc.util.json.JSONParse;
public class FormDataReader extends BaseReader {
Map textData;
static final Logger log = Logger.getLogger(DefaultReader.class);
public FormDataReader(HttpServletRequest request, Method method, Object object) {
super(request, method, object);
// TODO Auto-generated constructor stub
}
@Override
public Object result() {
clazz = object.getClass();
types = method.getParameterTypes();
int length = types.length;
log.debug("length="+length);
if(length>0){
// 请求参数名数组
names = getParameterNames(clazz,method.getName(), length);
log.debug("names="+names.length);
values = new Object[types.length];
if(names!=null){
getTextData();
for (int i = 0; i < types.length; i++) {
Class> type = types[i];
values[i] = getParameterValue(type, names[i]);
}
try {
return method.invoke(object,values);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}// 没有参数,执行当前Action方法
return InvokeUtils.invoke(clazz, method.getName(), object, null);
}
@Override
protected Object getParameterValue(Class> type, String name) {
// 基础类型获取值
return getValue(type, name);
}
private void getTextData() {
textData = new HashMap();
// 上传实例
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List list = null;
try {
list = servletFileUpload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
for(int i=0;i type, String name) {
Object value = null;
String str = textData.get(name);
str = getCharset(str);
if(String.class.isAssignableFrom(type)) {
value = str;
}else if(Integer.class.isAssignableFrom(type)
|| Short.class.isAssignableFrom(type)
|| short.class.isAssignableFrom(type)
|| int.class.isAssignableFrom(type)){
try{
value = Integer.valueOf(str);
}catch(Exception e){}
}else if(Long.class.isAssignableFrom(type)
|| long.class.isAssignableFrom(type)){
try{
value = Long.valueOf(str);
}catch(Exception e){}
}else if(Float.class.isAssignableFrom(type)
|| float.class.isAssignableFrom(type)){
try{
value = Float.valueOf(str);
}catch(Exception e){}
}
else if(Double.class.isAssignableFrom(type)
|| double.class.isAssignableFrom(type)){
try{
value = Double.valueOf(str);
}catch(Exception e){}
}else if(Boolean.class.isAssignableFrom(type)
|| boolean.class.isAssignableFrom(type)){
if(str!=null && str.equalsIgnoreCase("true")){
value = true;
}else if(str!=null && str.equalsIgnoreCase("false")){
value = false;
}
}else if(Time.class.isAssignableFrom(type))
try {
value = Constants.DEFAULT_TIME_FORMAT.parse(str);
} catch (ParseException e) {
log.error(e.getMessage());
}
else if(Date.class.isAssignableFrom(type)){
try {
value = Constants.DEFAULT_DATE_TIME_FORMAT.parse(str);
} catch (ParseException e) {
log.error(e.getMessage());
}
}else if(byte[].class.isAssignableFrom(type)){
value = str;
}else if(String[].class.isAssignableFrom(type)){
value = request.getParameterValues(name);
}else {
if (type.isArray()) {
Class> clazz;
try {
clazz = Class.forName(type.getCanonicalName().replace("[]", ""));
return JSONParse.parseArray(str, clazz);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
} else if (Map.class.isAssignableFrom(type) || HashMap.class.isAssignableFrom(type)) {
log.error("无法解析Map类型,请使用对象模式接收:" + name);
return null;
} else if (Set.class.isAssignableFrom(type) || HashSet.class.isAssignableFrom(type)
|| List.class.isAssignableFrom(type) || ArrayList.class.isAssignableFrom(type)) {
log.error("不支集合类型,请使用数组类型接收:" + name);
return null;
} else {
// 尝试对象模式接收
return JSONParse.parseObject(str, type);
}
}
return value;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy