【发布时间】:2019-01-18 13:45:48
【问题描述】:
我有一个已经实现的控制器方法,它返回一个值或抛出一个异常。
@Override
@PostMapping(Endpoint.SUB_RESOURCE)
@ResponseStatus(HttpStatus.CREATED)
public EmployeeBankAccountOutputDto createBankAccount(@ApiParam("Account data") @RequestBody final EmployeeBankAccountInputDto accountCreationDto) {
try {
return service.createBankAccount(accountCreationDto);
} catch (InvalidAccountDataException ex) {
throw new InvalidAccountDataResponseException(ex, ex.getErrors());}
} catch (CountryNotFoundException ex) {
throw new CountryNotFoundResponseException(ex.getCountryCode(), ex);
}
}
在这段代码中,我只想在警告级别记录异常消息,而不是抛出异常,因为我不想看到类似:
14:37:02,610 ERROR [] c.m.w.ApiExceptionHandler:135 - Account API error occurred: 400
所以如果我只是把
log.warn(ex.getMessage()); 到第一个 catch 语句,它是给
缺少返回语句
该 catch 块的错误正常。那么如何处理不抛出异常调用api并正确发送异常消息,因为方法的返回类型是dto?
【问题讨论】:
-
尝试通过扩展
ResponseEntityExceptionHandler来实现异常处理程序。
标签: java spring spring-boot exception exception-handling