相关疑难解决方法(0)

为什么我们不必将run-catch添加到RuntimeException?

我想问为什么我们不必添加try-catch块一段RuntimeException时间我们应该用其他异常来做?

我的意思是:

public class Main {
    public static void main(String[] args) {
       throw new RuntimeException();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:当我说:throw new RuntimeException();很明显会发生异常,为什么编译器不禁止这样做?

java exception

19
推荐指数
1
解决办法
1万
查看次数

防止Spring Boot应用程序中的自定义异常的堆栈跟踪日志记录

Spring Boot(mvc)中是否有一种方法可以记录自定义异常并抛出它,而不会在日志文件中看到它的堆栈跟踪?但是对于任何其他异常仍然会看到堆栈跟踪.

很长的解释:

我正在使用spring boot创建一个简单的休息服务.我喜欢自定义异常,默认情况下日志中没有堆栈跟踪,并且使用基本异常详细信息(状态,错误,消息)创建了json响应.

问题是它根本没有创建日志条目,因此我必须手动执行此操作:

自定义例外

@ResponseStatus(value = HttpStatus.CONFLICT)
public class DuplicateFoundException extends RuntimeException {
    public DuplicateFoundException(String message) {
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出服务方法的异常(在@RestController中)

if (!voteDao.findByItemAndUser(item, voteDto.getUserId()).isEmpty()) {
    log.warn("... already voted ...");   //TODO: don't do this for every throw
    throw new DuplicateFoundException("... already voted ...");
}
Run Code Online (Sandbox Code Playgroud)

有更多的异常导致在每次抛出之前放置日志语句,这是一种我认为不好的方法.我已经尝试从服务方法中删除所有日志语句并创建了@ControlledAdvice,我将记录所有自定义异常并重新抛出它们,所以我仍然像以前一样得到好的json:

@ControllerAdvice
public class RestExceptionHandler {
    private static final Logger log = Logger.getLogger(RestExceptionHandler.class);

    @ExceptionHandler
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        if …
Run Code Online (Sandbox Code Playgroud)

java logging spring exception-handling spring-boot

16
推荐指数
4
解决办法
1万
查看次数

防止异常与捕获Java中的异常

我想知道其他SOers在实践中如何处理和/或防止异常.

在什么情况下你会阻止例外,以及如何?在什么情况下你会捕获异常?

我通常会通过,基本上说,阻止'NullPointerExceptions'(和其他类似的) if(foo!=null) {...}

我发现在大多数情况下,这比使用try-catch块所涉及的所有内容都要小.

当潜在的异常更复杂或更多时,我使用try-catch块.

java error-handling exception

11
推荐指数
4
解决办法
6770
查看次数