[英]How can I make a Spring Converter throw a custom exception instead of a ConversionFailedException?
我的代碼庫中有一堆自定義的彈簧轉換器,例如:
public class ElasticSearchConverter implements Converter<RequestModel, ResponseModel> {
@Override
public final ResponseModel convert(RequestModel requestModel) {
if(!requestModel.isValid()) {
throw new ElasticSearchException("Request Model is not valid");
}
... Implement converter
}
}
我通過使用spring ConversionService從服務中調用這些轉換器
@Service
public class ElasticService {
@Autowired
private ConversionService conversionService;
public ResponseModel getResponse(RequestModel requestModel) {
//Throws ConversionFailedException instead of ElasticSearchException
ResponseModel responseModel = conversionService.convert(requestModel, ResponseModel.class);
return responseModel;
}
}
我的問題是,當我將我的ElasticSearchException
放入我的ElasticSearchConverter
它被捕獲在spring ConversionUtils
類中,並轉換為ConversionFailedException
。 我想捕獲在轉換器中拋出的特定ElasticSearchException
。
如何從服務類的spring Converter
類中捕獲特定異常?
您需要實現將處理異常的類
@ControllerAdvice
public class ExceptionTranslator {
@ExceptionHandler(ConversionFailedException.class) //handle your Exception
@ResponseStatus(HttpStatus.BadRequest) // Define the status you want to return
@ResponseBody
public ErrorDTO processElasticSearchException(ConversionFailedException ex) {
return new ErrorDTO();
/* Format your response as you need*/
}
}
@ControllerAdvice
“帶有(注釋)的類可以顯式聲明為Spring bean或通過類路徑掃描自動檢測” 顯示文檔
@ExceptionHandler
定義要捕獲的異常
@ResponseStatus
定義http響應狀態
@ResponseBody
序列化自動響應為json對象
對於我的項目,我定義了一個ErrorDTO來格式化響應,您可以執行同樣的操作,而只需構造對象並返回它
您還可以將要執行的代碼放入此方法中,並在需要時引發其他異常
您可以編寫包裝Spring ConversionService的簡單適配器類。 在該類中,您將具有一個convert()方法,該方法在try / catch中委托給包裝的ConversionService方法,捕獲ConversionFailedException,對其進行檢查(例如,使用getRootCause()),然后將其作為您選擇的異常重新拋出。 然后,對於所有其他將使用ConversionService的類,則應使用包裝器類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.