从静态方法中捕获异常 - Java 中的最佳实践

Catching exceptions from static methods - best practice in Java

我需要一些建议。

由于静态 HelloWorld.Answer 方法抛出 HelloException,下面的代码会出错。

@RestController
public class HelloController {
    
    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public HelloResult Hello(@RequestBody HelloRequest request) {

        HelloResult result = HelloWorld.Answer(request.getName());
            
        return result;        
    }
}

如果我按照 VS Code 中的 Quick Fix ... 并添加 Try-Catch-block,结果将是

@RestController
public class HelloController {
    
    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public HelloResult Hello(@RequestBody HelloRequest request) {

        HelloResult result;

        try {
            result = HelloWorld.Answer(request.getName());
        } catch (HelloException e) {
            e.printStackTrace();
        }
            
        return result;        
    }
}

这会产生另一个错误,

The local variable result may not have been initialized

所以我的问题是 - Java 中的最佳实践是什么,HelloController.Hello 中应该做什么?

每当您不确定如何处理异常时,正确的做法是根本不捕获它。

而是将其添加到代码所在方法的 throws 子句中:

@RequestMapping(value = "/hello", method = RequestMethod.POST)
public HelloResult Hello(@RequestBody HelloRequest request)
throws HelloException {

    HelloResult result = HelloWorld.Answer(request.getName());
        
    return result;        
}

这很重要,因为如果 REST 服务无法正确完成其操作,您希望它明显失败。您不希望该服务在实际上不工作时假装它工作。 (想一想已经做到这一点的任何设备或程序。如果你按下电梯按钮但它实际上没有注册,那就太令人沮丧了,不是吗?)