对返回页面的response里面含有null的转换成""

由于项目中经常会出现"null"这样的字符串,每次去判断感觉特别麻烦,特此查阅资料做了一个过滤器用于特殊处理,特此记录一波

第一步:需要使用的对象



public class ResponseWrapper extends HttpServletResponseWrapper {

	private ByteArrayOutputStream buffer;

	private ServletOutputStream out;

	public ResponseWrapper(HttpServletResponse response) {
		super(response);
		buffer = new ByteArrayOutputStream();
		out = new WrapperOutputStream(buffer);
	}

	@Override
	public ServletOutputStream getOutputStream() throws IOException {
		return out;
	}

	@Override
	public void flushBuffer() throws IOException {
		if (out != null) {
			out.flush();
		}
	}

	public byte[] getContent() throws IOException {
		flushBuffer();
		return buffer.toByteArray();
	}

	class WrapperOutputStream extends ServletOutputStream {
		private ByteArrayOutputStream bos;

		public WrapperOutputStream(ByteArrayOutputStream bos) {
			this.bos = bos;
		}

		@Override
		public void write(int b) throws IOException {
			bos.write(b);
		}

		@Override
		public boolean isReady() {
			return false;
		}

		@Override
		public void setWriteListener(WriteListener arg0) {

		}
	}

}

第二步:特殊处理



import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** 
 * 对返回页面的response里面含有null的转换成""
 * 
 * @author 创建作者 : LY
 * @date   创建时间 :2018年11月29日 下午4:05:39
 */
public class ResponseFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
		HttpServletRequest servletRequest = (HttpServletRequest) request;
		String path = servletRequest.getServletPath();
		String method = servletRequest.getMethod();
//		System.out.println("path:"+path+"-----method:"+method);
		
		//过滤不需要处理的接口 含"."以及绝大部分"GET" 请求都是静态资源
		//加上"GET" 是因为   项目中的导出数据都是GET请求,最开始未处理 导致导出数据乱码 找了许久才发现这里被自己埋了一个坑
		if (path.contains(".") || path.contains("judgeSession") || method.equals("GET") ) {// 在过滤url之外
			chain.doFilter(request, response);
		} else {
			ResponseWrapper wrapperResponse = new ResponseWrapper((HttpServletResponse) response);// 转换成代理类
			chain.doFilter(request, wrapperResponse);
			byte[] content = wrapperResponse.getContent();// 获取返回值
			// 判断是否有值
			if (content.length > 0) {
				String str = new String(content, "UTF-8").replaceAll(":null,", ":\"\",");
				// 把返回值输出到客户端
				ServletOutputStream out = response.getOutputStream();
				out.write(str.getBytes());
				out.flush();
			}
		}
	}

	@Override
	public void destroy() {
	}
}

第三步:web.xml中添加以下代码


	<filter>
		<filter-name>responseFilter</filter-name>
		<filter-class>com.cht.oneoperation.aop.ResponseFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>responseFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

里面许多东西其实自己并不是太懂,但是慢慢来,自勉❤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值