java - 如何显示@ResponseStatus 错误的自定义错误消息?

标签 java spring spring-rest

我创建了一个自定义 @ResponseStatus 异常,并希望它作为 @RestController 的 json 响应以及响应负载返回。

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class BadRequestException extends NestedRuntimeException {
    public BadRequestException(String msg) {
        super(msg);
    }
}

我有一个 CommonsRequestLoggingFilter 应该在发送响应后记录响应。因此过滤器读取 wrapper.getContentAsByteArray():

public class CustomLoggingFilter extends CommonsRequestLoggingFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        ContentCachingResponseWrapper responseToUse = new ContentCachingResponseWrapper(response);

        try {
            super.doFilterInternal(request, responseToUse, filterChain);
        } finally {
            byte[] buf = responseToUse.getContentAsByteArray();
            String message;

            //PROBLEM: buf.length() == 0 in error case, thus cannot create the message
            LOGGER.info("Response: " + message);
        }
    }
}

一般情况下,日志记录有效,但如果出现 @ResponseStatus 错误,响应正文/有效负载将丢失!

问题:如何在异常期间保留主体有效负载以进行日志记录?

最佳答案

而不是使用 ResponseStatus。你可以考虑使用ExceptionHandler。

@ExceptionHandler(异常类) public ModelAndView handleError(HttpServletRequest req, Exception ex) {..}

关于java - 如何显示@ResponseStatus 错误的自定义错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233056/

相关文章:

java - Jenkins/Maven 增量构建问题

java - 不确定使用 BufferedReader 根据 boolean 值检查 .txt 文件中的信息

java - 如何在java中返回匿名实例化对象

java - 如何创建包含文本框和绘画组件的 JFrame?

java - Hibernate 未在不同架构上创建新列

java - 在生产代码中使用 @Resource 注入(inject)有多糟糕

java - 使用 Spring Security 进行身份验证后如何根据角色进行重定向

java - WebSecurityConfigurerAdapter 配置重叠权限

java - 如何添加多个查询参数不同的 RestController 端点?

xml - 找不到适合请求类型 JAXBElement 的 HttpMessageConverter