Java中API错误到异常映射的模糊映射

Java中API错误到异常映射的模糊映射,java,custom-data-type,Java,Custom Data Type,我正在使用一个API,我想为它实现正确的错误处理。API非常简单,以请求/应答方式工作 它的设计方式是,每个请求要么用一条消息确认,消息中包含一个表示成功的关键字,要么用一个表示错误的关键字,后跟一个错误代码和一条错误消息 虽然我可以很容易地区分成功回复和错误回复,但识别错误并将其映射到异常有点棘手。虽然每个错误都包含一个错误代码,但由于错误原因,此代码不是唯一的 ERR ABC: You have entered an invalid command "bla" ERR XZ0: You ha

我正在使用一个API,我想为它实现正确的错误处理。API非常简单,以请求/应答方式工作

它的设计方式是,每个请求要么用一条消息确认,消息中包含一个表示成功的关键字,要么用一个表示错误的关键字,后跟一个错误代码和一条错误消息

虽然我可以很容易地区分成功回复和错误回复,但识别错误并将其映射到异常有点棘手。虽然每个错误都包含一个错误代码,但由于错误原因,此代码不是唯一的

ERR ABC: You have entered an invalid command "bla"
ERR XZ0: You have entered illegal characters "äöü"
ERR XZ0: Values must be between 1 and 4. 9 is invalid.
正如您在我的示例中所看到的,最后两个错误虽然具有相似但不同的原因,但仍然携带相同的代码。这使得将错误映射到异常非常不舒服,因为我只能通过组合代码和消息来识别原因。由于API在其消息中包含部分错误,我还必须隔离显示错误输入的部分。这种输入并不总是用引号表示,这使得识别更加困难。(◔_◔)

为了执行可靠的映射,我正在编译一个所有可能的错误消息和代码的列表。然后我需要构建一个类似于模糊映射的东西,它将给定的代码和消息映射到最接近的可用匹配。(最有可能的方法是搜索子字符串匹配/计算错误消息中的levenshtein距离)实现这一点需要在可能的消息和代码上进行几个循环,不应该太难


但是,我希望我的新FuzzyMap数据类型实现java.util.Map。这样做是否违反了映射的任何规则/属性?生成的FuzzyMap将多个键映射到同一个值,从而使其具有满射性。这会导致我的数据类型出现任何问题吗?

我不确定为什么需要特殊的
FuzzyMap
。我会d通过一个简单的
Map
来解决它,它将规则或正则表达式映射到异常构造函数上。类似于:

Map<String, Function<String[], ? extends Exception> exceptionMappings = new HashMap<>();

exceptionMappings.put(
    "ERR ABC: You have entered an invalid command \\\"([^\\\"]*)\\\"",
    parameters -> new InvalidCommandException(parameters[0]));

map这很简洁:谢谢。通过在示例中引入正则表达式作为键,基本上消除了模糊性。