TIL

@Valid가 동작하지 않은 오류

HANDA개발 2024. 4. 9. 17:40
    @PostMapping("/save-coupon")
    @Operation(summary = "쿠폰 저장", description = "쿠폰목록에서 선택한 쿠폰리스트를 쿠폰함에 저장한다.")
    public CommonResult<Object> saveCpnList(@Valid @RequestBody List<SaveCpnListInDto> inDto) {

        mVouchService.saveCpnList(inDto);
        return CommonResult.ok();
    }
}

 

🤔 오류현상

파라미터를 List로 받았더니 Valid 어노테이션이 동작하지 않는다.

 

✔ 해결방법

    @PostMapping("/save-coupon")
    @Operation(summary = "쿠폰 저장", description = "쿠폰목록에서 선택한 쿠폰리스트를 쿠폰함에 저장한다.")
    public CommonResult<Object> saveCpnList(@Valid @RequestBody SaveCpnListInDto inDto) {

        mVouchService.saveCpnList(inDto);
        return CommonResult.ok();
    }
}

 

@Data
public class SaveCpnListInDto {

  @Valid
  private List<SaveCpnListDto> SaveCpnListDtoList;

}

@Data
public class SaveCpnListDto {

  //변수 정의

}​

 

파라미터를 감싸고 있던 List를 거두고 별도의 변수  class를 생성해 파라미터 클래스 내부에

List를 넣어놓고 @Valid를 붙여준다.

 

 

💎 해결방법 2

근본적인 해결책이 있었다.

controller 클래스에 @Validated 어노테이션을 붙이면 클래스 단위로 유효성 검증이 가능해서

@Valid를 붙인 List<>단위의 파라미터도 유효성체크를 할 수 있다.

 

@ResController
@Validated
@RequiredArgsConstructor
public class UserController {

	public void addUser(@Valid AddUserRequest addUserRequest) {
		...
	}
}
출처: https://mangkyu.tistory.com/174 [MangKyu's Diary:티스토리]​

 

@Valid와 @Validatied 의 차이 : https://mangkyu.tistory.com/174 참조