从静态方法中捕获异常 - 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 服务无法正确完成其操作,您希望它明显失败。您不希望该服务在实际上不工作时假装它工作。 (想一想已经做到这一点的任何设备或程序。如果你按下电梯按钮但它实际上没有注册,那就太令人沮丧了,不是吗?)
我需要一些建议。
由于静态 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 服务无法正确完成其操作,您希望它明显失败。您不希望该服务在实际上不工作时假装它工作。 (想一想已经做到这一点的任何设备或程序。如果你按下电梯按钮但它实际上没有注册,那就太令人沮丧了,不是吗?)