Spring

Spring MVC Controller - Header(@RequestHeader) Validation 처리

Lucas-Kim 2020. 5. 22. 17:18

Spring MVC Controller에서 헤더 영역의 필드 값을 체크하기 위한 Validation 방법에 대하여 간단히 알려 드리려고 합니다.

Controller 내에 다음과 같이 설정 해 주시면, 간단하게 Validation 처리가 가능합니다.

  1. Common

    • 컨트롤러상단에 @Validated 추가필요. ( import org.springframework.validation.annotation.Validated )

      import org.springframework.validation.annotation.Validated;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @Validated
      public class SampleController {
               // To-do-something
      }
  2. Header Validation.

    • 필수 포함 여부는 required = true 또는 false 로 정의 (default : true)

    • String, Collection, Map 이며, 최소 size가 1 이상인 경우 :  @Size(min=1) ( import javax.validation.constraints.Size; )

    • int, long, short 이며, 최소 값이 1 이상인 경우 : @Min(1) ( import. javax.validation.constraints.Min; )

    • Annotation관련 자세한 내용은 해당 링크 참조

      ( https://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html )

      @RequestMapping(
            value = "/header/{pathVariable}/validate",
            method = RequestMethod.POST)
        public CommonResponse headerValidate(
            @PathVariable @Min(1) Long pathVariable,
            @RequestHeader(value = "X-Header-String", required = false) @Size(min = 1) String headerString,
            @RequestHeader(value = "X-Header-Number", required = true) @Min(1) int headerInt) {
      
          return okResponse("OK");
      }
    • Validation에 따른 Response 응답 포맷. ( 응답 포맷은 커스텀 하게 작성 되어 있는점 참고 바랍니다. )

      • 숫자 검증 @Min(1) 일때 숫자 0 전달 시

        {
            "code": 400,
            "message": "headerValidate.headerInt: 반드시 1보다 같거나 커야 합니다.",
            "data": [
                "sample.controller.SampleController value '0' 반드시 1보다 같거나 커야 합니다."
            ]
        }
      • 숫자 검증 @Min(1) 일때 문자열 'a' 전달 시

        {
            "code": 400,
            "message": "OK",
            "data": "Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: \"a\""
        }
      • 문자열 검증 @Size(min = 1) 일때 빈 문자열("") 전달 시

        {
            "code": 400,
            "message": "headerValidate.headerString: 반드시 최소값 1과(와) 최대값 2147483647 사이의 크기이어야 합니다.",
            "data": [
                "sample.controller.SampleController value '' 반드시 최소값 1과(와) 최대값 2147483647 사이의 크기이어야 합니다."
            ]
        }

 

#참조 : https://www.yawintutor.com/how-to-validate-request-header-in-spring-boot/