SpringBoot接口返回null则响应404

Posted HackShendi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot接口返回null则响应404相关的知识,希望对你有一定的参考价值。

Hello,I’m Shendi

当我的接口遭到恶意访问时,我想返回404,达到让其以为此接口不存在的目的

实现思路

因为使用的 SpringBoot,所以第一时间想搜寻是否提供了某种方法来让我实现,然并卵

后来想到使用过滤器,过滤器可以在接口执行完毕后继续执行一些操作

因我要获取接口是否响应了数据,所以需要代理响应

允许扫描Servlet注解

因使用的SpringBoot,要扫描Servlet注解需要在启动类(Application)上加上 @ServletComponentScan注解

@ServletComponentScan
public class Application {}

编写过滤器

/**
 * 默认过滤器,统一编码,以及响应体为null则返回404错误.
 * @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>
 * @version 1.0
 */
@WebFilter("/*")
public class DefaultFilter extends HttpFilter {
	private static final long serialVersionUID = 3455876099526058476L;
	
	public static final String ENCODING = "UTF-8";
	
	@Override
	protected void doFilter(HttpServletRequest req, HttpServletResponse resp, FilterChain chain) throws IOException, ServletException {
		req.setCharacterEncoding(ENCODING);
		resp.setCharacterEncoding(ENCODING);
		
		// 代理响应
		MyResponse mr = new MyResponse(resp);
		
		chain.doFilter(req, mr);
		
		if (mr.nullResp) resp.setStatus(404);
	}
	
	class MyResponse extends HttpServletResponseWrapper {
		
		/** 响应是否为空 */
		public boolean nullResp = true;
		
		public MyResponse(HttpServletResponse response) {
			super(response);
		}
		
		@Override
		public ServletOutputStream getOutputStream() throws IOException {
			// 当接口return null或者无返回值时,则不会触发此函数
			nullResp = false;
			return super.getOutputStream();
		}
		
	}
	
}

以上是关于SpringBoot接口返回null则响应404的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot之get请求404

如何在 Spring Boot @ResponseBody 中返回 404 响应状态 - 方法返回类型是响应?

MockMvc 响应返回 404,预期响应 201

@ApiResponse 响应体为空(Spring Boot)

Springboot 自定义多个404页面

SpringBoot全局异常处理与定制404页面