[英]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.