[java] Spring MVC에서 데이터 유효성 검사 및 에러 처리 방법

Spring MVC는 데이터의 유효성을 검사하고 에러를 처리하는 기능을 제공합니다. 이 기능을 활용하여 사용자의 입력 데이터를 검증하고, 잘못된 데이터를 처리할 수 있습니다. 이 글에서는 Spring MVC에서 데이터 유효성 검사와 에러 처리를 위한 방법을 알아보겠습니다.

1. 데이터 유효성 검사

Spring MVC에서 데이터 유효성 검사는 주로 javax.validation 패키지의 애노테이션을 활용하여 수행됩니다. 예를 들어, 사용자의 이름을 입력 받는 폼에서 이름이 비어있는지 확인하고 싶다면, 다음과 같이 @NotEmpty 애노테이션을 사용할 수 있습니다.

public class UserForm {
    @NotEmpty(message = "이름은 필수 입력 항목입니다.")
    private String name;

    // getter, setter
}

위에서 @NotEmpty는 해당 필드가 빈 값이 아닌지를 검사하는 애노테이션입니다. 만약 name 필드가 비어있으면, 에러 메시지 “이름은 필수 입력 항목입니다.”가 생성됩니다.

데이터 유효성 검사는 컨트롤러에서 수행됩니다. 컨트롤러에서 유효성 검사를 수행하려면, @Valid 애노테이션을 사용하여 검증할 객체를 지정해야 합니다.

@Controller
public class UserController {

    @PostMapping("/user")
    public String createUser(@Valid UserForm userForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            // 에러 처리 로직
        }
        // 유효성 검사 통과한 경우 데이터 처리 로직
    }
}

위 예제에서 @Valid 애노테이션은 UserForm 객체의 유효성을 검사하도록 지정하고 있습니다. 그리고 BindingResult 객체를 통해 유효성 검사 결과를 확인할 수 있습니다.

2. 에러 처리

유효성 검사에서 발생한 에러 처리는 BindingResult를 통해 수행할 수 있습니다. BindingResult 객체에는 유효성 검사에서 발생한 에러들이 담겨 있습니다.

에러 처리는 주로 다음과 같은 방식으로 수행됩니다:

컨트롤러에서 직접 에러 처리 로직을 구현하는 방법은 다음과 같습니다:

@Controller
public class UserController {

    @PostMapping("/user")
    public String createUser(@Valid UserForm userForm, BindingResult bindingResult, Model model) {
        if (bindingResult.hasErrors()) {
            // 에러 처리 로직
            for (FieldError error : bindingResult.getFieldErrors()) {
                System.out.println(error.getField() + ": " + error.getDefaultMessage());
            }
            return "error";
        }
        // 유효성 검사 통과한 경우 데이터 처리 로직
        model.addAttribute("user", userForm);
        return "success";
    }
}

위 예제에서는 hasErrors() 메소드를 통해 에러가 있는지 확인하고, getFieldErrors() 메소드를 통해 필드별 에러 목록을 가져옵니다. 이후 에러 처리 로직을 구현하고, 유효성 검사 통과한 경우 데이터 처리 로직을 수행합니다.

에러 페이지로 리다이렉트하는 방법은 다음과 같습니다:

@Controller
public class UserController {

    @PostMapping("/user")
    public String createUser(@Valid UserForm userForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "redirect:/error";
        }
        // 유효성 검사 통과한 경우 데이터 처리 로직
        return "redirect:/success";
    }

    @GetMapping("/error")
    public String error() {
        return "error";
    }

    @GetMapping("/success")
    public String success() {
        return "success";
    }
}

위 예제에서 /error 경로로 리다이렉트하여 에러 페이지를 보여주는 방식입니다.

결론

Spring MVC에서 데이터의 유효성 검사와 에러 처리를 위한 방법을 알아보았습니다. javax.validation 패키지의 애노테이션과 BindingResult를 활용하여 데이터 유효성 검사를 수행하고, 에러를 처리할 수 있습니다. 이를 통해 안정적이고 신뢰성 있는 웹 애플리케이션을 개발할 수 있습니다.

References