虽然many people say you should not use exceptions to handle bad user input,但很难找到共识。尽管如此,我还是不相信在我的具体案例中做坏事。你能试着解释我为什么错吗?
我的代码(请关注异常处理方面)如下。我在这里使用异常的理由是,如果我没有,假设我想让验证逻辑接近关键字解析(因为解析和验证是紧密耦合的),我将不得不改变三种方法(submitOnAdd,submitOnUpdate, getKeywords)让他们处理这种特殊情况。你认为在这种情况下我使用例外肯定是错的,还是个人风格的问题?
public SubmitResponse internalSubmit(Map<String, String[]> submitParameters) {
try {
if (!submitParameters.containsKey("foo")) {
return submitOnAdd(submitParameters);
} else {
return submitOnModify(submitParameters);
}
} catch (SubmitErrorException e) {
return SubmitResponse.fieldError(Arrays.asList(e.getSubmitError()));
}
}
SubmitResponse submitOnAdd(Map<String, String[]> submitParamters) {
// do some stuff
// ...
if (addKeywordList(createKeywordList(submitParameters.get("concatenated_keywords"))
return SubmitResponse.OK();
return SubmitResponse.bad("Failed to add");
}
SubmitResponse submitOnUpdate(Map<String, String[]> submitParamters) {
// do some other stuff
// ...
if (updateKeywordList(createKeywordList(submitParameters.get("concatenated_keywords"))
return SubmitResponse.OK();
return SubmitResponse.bad("Failed to update");
}
List<Keyword> getKeywords(String concatenatedKeywords) {
List<String> rawKeywords = splitKeywords(concatenatedKeywords);
return Collections.transform(new Function<String, Keyword>() {
@Override
public KeywordListProto.Keyword apply(String expression) {
return buildKeyword(expression);
}
});
}
private Keyword buildKeyword(String rawKeyword) {
// parse the raw keyword
if (/*parsing failed */)
throw new SubmitResponseException("Failed to parse keyword " + rawKeyword);
return parsedKeyword;
}
答案 0 :(得分:1)
我不能说我永远不会建议在输入验证中使用Exceptions。但在这种情况下,我会说它增加了很多混乱。我要么: