一个Trim Interceptor

很多人想要这个东西,都说可以Interceptor来自动trim掉输入,但为什么就没有人整出来呢?

既然没人弄,那我就弄一个呗。不过,其实,这个类基本是从’Apache Struts 2 Web Application Development’中抄来的,我另外做了一点修改。

public class TrimInterceptor extends MethodFilterInterceptor {

	private List<String> excluded = new ArrayList<String>();

	protected String doIntercept(ActionInvocation invocation) throws Exception {
		Map<String, Object> parameters = invocation.getInvocationContext().getParameters();

		for (String param : parameters.keySet()) {
			if (isIncluded(param)) {
				String[] vals = (String[]) parameters.get(param);
				boolean allNull = true;
				for (int i = 0; i < vals.length; i++) {
					vals[i] = StringUtils.trimToNull(vals[i]);
					allNull = allNull && (vals[i] == null);
				}
				if(allNull){
					parameters.put(param, null);
				}
				
			}
		}

		return invocation.invoke();
	}

	private boolean isIncluded(String param) {
		for (String exclude : excluded) {
			if (param.startsWith(exclude)) {
				return false;
			}
		}

		return true;
	}

	public void setExcludedParams(String excludedParams) {
		for (String s : StringUtils.split(excludedParams, ",")) {
			excluded.add(s.trim());
		}
	}

}

//struts.xml

<interceptor class="com.xxx.TrimInterceptor" name="trim"/>
....
                <interceptor-ref name="servletConfig"/>
                 <interceptor-ref name="trim"/> 
                <interceptor-ref name="params"/>

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.