从过滤器发送自定义响应对象和响应代码

问题描述 投票:0回答:1

我需要从过滤器代码发送401 response status code和自定义对象响应,如下所示:

res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED)

使用上面的代码,我能够发送代码但不知道如何使用上面的代码发送自定义对象。

java servlet-filters spring-filter
1个回答
0
投票

您可以使用下面的代码snap来将字节写入响应。

response.getOutputStream().write(responseToSend);

Filter下面用于以json格式写入错误。

public class TestFilter implements Filter {

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

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException {

        if(ANY CONDITION){
            //ANY POJO CLASS
            ErrorResponse errorResponse = new ErrorResponse();
            errorResponse.setCode(401);
            errorResponse.setMessage("Unauthorized Access");

            byte[] responseToSend = restResponseBytes(errorResponse);
            ((HttpServletResponse) response).setHeader("Content-Type", "application/json");
            ((HttpServletResponse) response).setStatus(401);
            response.getOutputStream().write(responseToSend);
            return;
        }

        //ANY OTHER BUSINESS LOGIC
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }

    private byte[] restResponseBytes(ErrorResponse eErrorResponse) throws IOException {
        String serialized = new ObjectMapper().writeValueAsString(eErrorResponse);
        return serialized.getBytes();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.