我有一个@ControllerAdvice类,它捕获各种类型的自定义异常。问题是,这些自定义异常可以在Controller中抛出我的各种方法。
所以在我的@ControllerAdvice类中,当Splunk异常时,我需要知道正在进行的具体操作,以便将正确的代码放入我的Splunk日志中。
例如:
@RestController
@RequestMapping(value = "/person/{id}")
public class PersonController {
public ResponseEntity<PersonDto> getPerson(@PathVariable final String id) throws PersonNotFoundException {
public ResponseEntity<PersonStuffDto> getPersonStuff(@PathVariable final String id) throws PersonNotFoundException {
......和我的建议:
@ControllerAdvice
public class PersonControllerExceptionHandler {
@ExceptionHandler(PersonNotFoundException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED) @ResponseBody
public ErrorResponse personNotFoundException (final PersonNotFoundException exception, final HttpServletRequest request) {
... Splunk ...
}
在personNotFoundException()方法中,我需要Splunk&#34; RETRIEVING_PERSON&#34;代码,或者&#34; RETRIEVING_PERSON_STUFF&#34;代码。
如何区分异常的来源?我是否必须检查请求...查看网址或其他内容?如果是这样的话,那么在控制器本身中放置异常处理或至少这部分内容会更容易吗?
答案 0 :(得分:1)
你可以做其中一件事:
在PersonNotFoundException中添加异常原因(以及必要时的描述)作为可选字段。您可以通过代码或描述放置源。
从PersonNotFoundException创建两个子异常,在异常控制器中通过异常类型解析。扔适当的子类型 PersonNotFoundException
最好是1个变体,因为你不应该创建新的类(例外)。
Error codes within exception vs exceptions hierarhy
和