我目前正在一个完整的通用场景中工作,在这个场景中,我将json作为字符串Map到dto类。这对我的功能很好 mapJsonToDto
但我正在尝试使它更通用,以便使用此函数的开发人员也可以指定要抛出的异常。所以他们可以随心所欲地抓。这样我就避免了一个例外。让函数处理一切。
public class MapperUtils {
public <T extends Throwable> Object mapJsonToDto(Class<?> dtoClass, String jsonDto, T exceptionToThrow) throws IOException {
Object dto = null;
try {
dto = new ObjectMapper().readValue(jsonDto, dtoClass);
} catch (IOException e) {
throw new exceptionToThrow();
}
return dto;
}
}
我无法理解如何将异常类示例传递给函数并同时抛出该特定类示例。
2条答案
按热度按时间gzszwxb41#
与其将异常传递给throw(这样会有一个完全错误的堆栈跟踪),我认为您需要一个函数来将异常从一种类型转换为另一种类型:
举个例子:
不过,一般来说,这看起来像是白痴设计。如果您发现ioexception过于通用,那么就不能通过允许调用者提供一个毫无疑问同样过于通用的Map器来手动解决问题。调用者唯一的出路就是深入研究异常,然后写一个if/elseif块(我不知道),其中包含大量的级别,以试图确定真正的问题,例如通过分析各种各样难看的消息。
要么你不关心细节级别,因此应该坚持ioexception(添加代码和无意义的间接层有什么意义?),要么你关心,这还不够好;你应该设计一个更好的错误系统。不过,那不是你的工作,那是
ObjectMapper.readValue
的工作。这就是为什么它抛出的ioexception可能应该被无干扰地发送。rryofs0p2#
你的例子差不多完成了。我只将throws类型更改为t并抛出给定的异常。
电话:
mapJsonToDto(String.class, "helo", new IllegalStateException());