👀
[Spring Boot] @RestControllerAdviceでバリデーションエラーのメッセージを整える
やりたいこと
バリデーションエラーで400のエラーのメッセージをわかりやすいようにしたい。
例)
{"status":400,"message":"invalid request. hoge: 空白は許可されていません, fuga: null は許可されていません"}
対応
@RestControllerAdviceの中で一括で対応する。
ErrorResponseはHttpStatusとmessageを渡せるように別途用意しておく。
@RestControllerAdvice
public class ErrorHandlerController {
@ExceptionHandler({ MethodArgumentNotValidException.class })
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorResponse handleException(MethodArgumentNotValidException e) {
String msg = e.getBindingResult().getAllErrors().stream().map(err -> {
if (err instanceof FieldError) {
return String.format("%s: %s", ((FieldError) err).getField(), err.getDefaultMessage());
}
return err.toString();
}).collect(Collectors.joining(", "));
return new ErrorResponse(HttpStatus.BAD_REQUEST.value(), "invalid request. " + msg);
}
}
Discussion