gpt4 book ai didi

spring - 如何从 Spring 过滤器返回响应为 Json?

转载 作者:行者123 更新时间:2023-12-04 11:49:30 24 4
gpt4 key购买 nike

在 spring 休息中,我需要从过滤器类的 doFilter() 发送身份验证错误。作为回应,我需要发送带有状态、消息和错误代码等字段的 json。请建议如何实现。我们没有使用 spring boot.Below 是关于身份验证错误的示例响应

{ "responseCode":"错误代码",
"responseMessage": "一些错误信息",
"responseStatus":"失败"
}

在 doFiler() 中,我正在验证 token ,如果它无效,我需要发送上面的示例响应。

最佳答案

假设你有 jackson 的 ObjectMapper作为 Spring bean 公开,您可以将以下内容用于 OncePerRequestFilter :

@Component
@RequiredArgsConstructor
public class MyFilter extends OncePerRequestFilter {

private final ObjectMapper mapper;

@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
FilterChain filterChain) throws IOException {

Map<String, Object> errorDetails = new HashMap<>();
errorDetails.put("message", "Invalid token");

httpServletResponse.setStatus(HttpStatus.FORBIDDEN.value());
httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);

mapper.writeValue(httpServletResponse.getWriter(), errorDetails);
}
}

对于普通 servlet Filter ,解决方案大致相同:

@Component
@RequiredArgsConstructor
public class MyFilter implements Filter {

private final ObjectMapper mapper;

@Override
public void init(FilterConfig filterConfig) {

}

@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException {

HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;

Map<String, Object> errorDetails = new HashMap<>();
errorDetails.put("message", "Invalid token");

httpServletResponse.setStatus(HttpStatus.FORBIDDEN.value());
httpServletResponse.setContentType(MediaType.APPLICATION_JSON_VALUE);

mapper.writeValue(httpServletResponse.getWriter(), errorDetails);
}

@Override
public void destroy() {

}
}

上面的例子依赖构造函数注入(inject),使用了Lombok的 @RequiredArgsConstructor 生成一个构造函数,该构造函数接收标有 final 的字段的值。 .

您也可以更换 Map<String, Object>根据您的需要,对于任何任意 POJO。

关于spring - 如何从 Spring 过滤器返回响应为 Json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57194249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com