👀

[Spring Boot] @RestControllerAdviceでバリデーションエラーのメッセージを整える

2023/03/11に公開

やりたいこと

バリデーションエラーで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