Spring Boot从错误响应中删除异常属性

时间:2019-03-09 10:43:24

标签: java spring spring-boot

为了处理我宁静的Spring后端中的错误,我有一些例外,下面是一个例外示例:

@ResponseStatus(value = HttpStatus.FORBIDDEN)
public class IllegalUserAgentException extends RuntimeException
{
    public IllegalUserAgentException(String exception)
    {
        super(exception);
    }

}

当我从服务中抛出此异常(在域驱动的体系结构中)时,Spring返回json错误以下

{
    "timestamp": 1552127820802,
    "status": 403,
    "error": "Forbidden",
    "exception": "com.example.exception.IllegalUserAgentException",
    "message": "test",
    "path": "/path/somePath"
}

如您所见,Spring添加了一个具有“ exception”名称的属性,我想删除该属性。 我添加了server.error.include-exception=false标志,但不起作用。 有解决办法吗?

2 个答案:

答案 0 :(得分:0)

我建议您做一个回应课。 在您的服务类中添加try catch,然后返回此对象。 在catch部分中实例化ResponseDto对象并相应地添加消息。这将正常处理您的异常。它具有可伸缩性,因为您还可以包装其他任何异常消息。

public class ResponseDto {

    @JsonProperty("url")
    private String url;

    @JsonProperty("status")
    private int status;

    @JsonProperty("userMsg")
    private String UserMsg;
}

答案 1 :(得分:0)

在spring-boot中,您可以通过定义扩展DefaultErrorAttributes的@Component来实现,然后重写getErrorAttributes函数以删除“异常”。

@Component
public class CustomErrorAttributes extends DefaultErrorAttributes {

    @Override
    public Map<String, Object> getErrorAttributes(
        WebRequest webRequest,
        boolean includeStackTrace
    ) {
        Map<String, Object> errorAttributes
            = super.getErrorAttributes(webRequest, includeStackTrace);
        errorAttributes.remove("exception");
        return errorAttributes;
    }

}

还有其他选择,例如使用@ControllerAdvice,您可以进一步仔细研究。