java - SpringMVC がパラメーター検証のために Hibernate バリデーターを統合する場合、なぜ直接例外をスローしないのですか?
天蓬老师
天蓬老师 2017-06-23 09:13:55
0
2
733

皆さんこんにちは、質問があります

1. 環境

リーリー

2. 構成は次のとおりです

リーリー

3.Bean とコントローラー

リーリー リーリー

質問:
なぜコード内で判定を表示するために result.hasErrors() を使用しなければならないのですか?
UserRequest のフィールドが定義を満たしていないことを確認し、直接例外をスローする方が合理的ではないでしょうか?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(2)
Peter_Zhu

问题:
为什么一定要在代码中用result.hasErrors()显示判断?
难道不能验证UserRequest中的字段不符合定义就直接抛异常,这样不更合理些吗?

例如我们在参数异常的时候返回给前端的是异常的具体参数名和描述,不是 Spring 给出的所有异常信息,如果 Spring 自动抛出异常,那么返回的信息你自己就不好控制了。

@PostMapping(UriView.REST_KNOWLEDGE_POINTS)
@ResponseBody
public Result createKnowledgePoint(@Valid KnowledgePoint knowledgePoint, BindingResult bindingResult) {
    // 如有参数错误,则返回错误信息给客户端
    if (bindingResult.hasErrors()) {
        return Result.fail(CommonUtils.getBindingMessage(bindingResult));
    }

    knowledgePoint.setKnowledgePointId(CommonUtils.uuid());
    knowledgePoint.setName(knowledgePoint.getName().trim());
    mapper.createKnowledgePoint(knowledgePoint);

    return Result.ok("", knowledgePoint);
}

/**
 * BindingResult 中的错误信息很多,对用户不够友好,使用 getBindingMessage()
 * 提取对用户阅读友好的定义验证规则 message。
 *
 * @param result 验证的结果对象
 * @return 验证规则 message
 */
public static String getBindingMessage(BindingResult result) {
    StringBuffer sb = new StringBuffer();

    for (FieldError error : result.getFieldErrors()) {
        // sb.append(error.getField() + " : " + error.getDefaultMessage() + "\n");
        sb.append(error.getDefaultMessage() + "\n");
    }

    return sb.toString();
}
いいねを押す +0
三叔

你只是在你的应用场景中考虑为什么,一个框架更多的是考虑大多数时候怎么做最合理。

大部分对于客户端数据的验证都不应当被当作“异常”,而是用户在不知道的情况下被允许犯的错误。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!