javax.validation.Validatorにチェックを使用します
- 自分のフィールドをチェックする必要性に注釈を追加する必要があります検証するためのエンティティクラスの場合
実際の例
使用する:まず、バリデータサブクラスを取得します
。バリバリ= Validation.buildDefaultValidatorFactory()getValidator();
APIは、参照することができ、前記
エンティティクラスをチェックします
セット<ConstraintViolationの<Object >>セット= validator.validate(OBJ、Default.class)。
このリンクします。https://blog.csdn.net/qq_38193966/article/details/95990268
----------------
@Validカスタムグローバルデータチェック異常情報+
私たちは、このようなフロントエンドとして、@Validは、データの検証を行うに使用し、現在のユーザーを追加したい、我々は確認することができます。
@RestController
public class UserController {
@PostMapping("/user") public void addUser(@RequestBody @Valid RequestDTO requestDTO){ //其余业务处理 System.out.println(requestDTO.toString()); } }
次のコードに示すように、入力データ・ルール:
@Data
public class RequestDTO {
@NotNull(message = "名字不能为空") String name; @NotEmpty(message = "密码不能为空") String password; @Override public String toString() { return "name=" + name + ",password=" + password; } }
我々は、フロントが(例えば、パスワードが空白の)不正なデータを偽造模倣と仮定します。
{
"name": "string", "password": "" }
我々は、エラーを予想通りプラス@Validプログラムはコメントことができるようになります。
{
"timestamp": "2019-08-26T14:12:02.542+0000", "status": 400, "error": "Bad Request", "errors": [ { "codes": [ "NotEmpty.requestDTO.password", "NotEmpty.password", "NotEmpty.java.lang.String", "NotEmpty" ], "arguments": [ { "codes": [ "requestDTO.password", "password" ], "arguments": null, "defaultMessage": "password", "code": "password" } ], "defaultMessage": "密码不能为空", "objectName": "requestDTO", "field": "password", "rejectedValue": "", "bindingFailure": false, "code": "NotEmpty" } ], "message": "Validation failed for object='requestDTO'. Error count: 1", "path": "/user" }
改善されたエラーメッセージ
このエラーメッセージがあまりにも明白冗長である、我々は簡素化したい、問題がエラーメッセージフィールドを投げた。しかし、今回は、当社のグローバルな例外処理と組み合わせることができます。
プロセスの例外にカスタム例外クラスのバインディングを書く1
ここでは、例外をキャッチしますので、我々はMethodArgumentNotValidExceptionは、@Validスローされた例外クラスをされていることに注意し、それが再定義された例外に情報を
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = MethodArgumentNotValidException.class) @ResponseBody public JsonResult MyExceptionHandle(MethodArgumentNotValidException exception){ exception.printStackTrace(); BindingResult result = exception.getBindingResult(); StringBuilder errorMsg = new StringBuilder() ; if (result.hasErrors()) { List<FieldError> fieldErrors = result.getFieldErrors(); fieldErrors.forEach(error -> { System.out.println("field" + error.getField() + ", msg:" + error.getDefaultMessage()); errorMsg.append(error.getDefaultMessage()).append("!"); }); } exception.printStackTrace(); return new JsonResult(-1,errorMsg.toString() ); } }
上記のコードは、エラー情報、それらはディスプレイを組み立てるために必要な情報(ここでは、ステータスコードと情報バックを含む、構造体中にパッケージJSON)の内部に取り込まれます。
- テスト結果
リクエストがちょうど再びそれを再送信している、今、あなたは、エラーメッセージが所定のフォーマットに合わせて当社に返却された見ることができます。
{
"code": -1, "msg": "密码不能为空!" }