java修改表单日期,javaweb修改表单参数---使用过滤器

需求:

所有的字段要将空字符串转成null;

问题:

我们知道表单如果不写值的时候,传递到后台的不是null,而且是空字符串。那么怎么改成null呢?

解决:

使用过滤器,将请求的参数修改过后继续,再传递下去。

Request请求对象是无法修改它本身数据(通过getXXX方法获得的数据)的!!而ServletRequest对象又是Web服务器自动产生的,我们有没有办法通过new创建来创建。但现实中,我们就有需要修改request请求的本身数据的情况,可以通过HttpServletRequestWrapper类可以 重写Request请求的get方法来达到修改Request本身数据的目的。

实现步骤

第一步:创建一个请求的包装类

package cn.gzsxt.basic.filter;

import java.util.Enumeration;

import java.util.Map;

import java.util.Vector;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

public class NullValueHandlerRequestWrapper extends HttpServletRequestWrapper {

private Map parameterMap;

public void setParameterMap(Map parameterMap) {

this.parameterMap = parameterMap;

}

public NullValueHandlerRequestWrapper(HttpServletRequest request) {

super(request);

}

@Override

public Enumeration getParameterNames() {

Vector vector = new Vector(parameterMap.keySet());

return vector.elements();

}

@Override

public String getParameter(String name) {

String[] results = parameterMap.get(name);

return results[0];

}

@Override

public Map getParameterMap() {

return this.parameterMap;

}

@Override

public String[] getParameterValues(String name) {

return this.parameterMap.get(name);

}

}

第二步:实现过滤器调用包装后的请求

package cn.gzsxt.basic.filter;

import java.io.IOException;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

public class NullvalueHandlerFilter implements Filter{

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

//获得所有字段

Map parameterMap = new HashMap<>(request.getParameterMap());

Set> entrySet = parameterMap.entrySet();

Iterator> iterator = entrySet.iterator();

while (iterator.hasNext()) {

Entry entry = iterator.next();

if (entry.getValue()!=null) {

for(int i=0;i

if ("".equals(entry.getValue()[i])) {

iterator.remove();

}

}

}

}

//parameterMap就会将空字符串转成null.

//注意:request对象是无法修改表单数据的!!ServletRequest对象是容Tomcat产生的,我们有没有办法new创建.

NullValueHandlerRequestWrapper wrapper =new NullValueHandlerRequestWrapper((HttpServletRequest)request);

wrapper.setParameterMap(parameterMap);

//获得重写后的请求

chain.doFilter(wrapper, response);

}

@Override

public void destroy() {

}

}

标签:javax,javaweb,java,表单,parameterMap,过滤器,import,servlet,public

来源: https://www.cnblogs.com/vieta/p/11149767.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值