inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션

회원가입 컨트롤러 유효성검사 AOP 적용

스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?

434

강프로그래머

작성한 질문수 110

1

안녕하세요 강사님

현재 스프링부트 3.2.2 버전을 사용하고 있습니다.

배운대로 개인적인 프로젝트에 적용해보고 있는데

@Around 애노테이션의 메서드 실행이

@GetMapping일 경우에는 AOP가 잘 작동하나

@PostMapping일 경우에는 작동하지 않고

@Validation 애노테이션에서 오류가 먼저 터집니다..

무슨 문제일까요..?

 

.m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<?> com.board.www.app.board.controller.api.BoardApiController.create(com.board.www.app.board.dto.BoardDto,org.springframework.web.multipart.MultipartFile) with 2 errors: [Field error in object 'dto' on field 'content': rejected value []; codes [NotBlank.dto.content,NotBlank.content,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dto.content,content]; arguments []; default message [content]]; default message [내용을 입력해 주세요]] [Field error in object 'dto' on field 'title': rejected value []; codes [NotBlank.dto.title,NotBlank.title,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dto.title,title]; arguments []; default message [title]]; default message [제목을 입력해 주세요]] ]

spring-boot junit 소프트웨어-테스트

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

님께서 문의하신 내용은 Spring Boot에서 @PostMapping을 사용할 때 AOP가 작동하지 않고, @Valid 애노테이션에서 오류가 나는 문제를 말씀하시는 것 같습니다. 보내주신 이미지 내용을 바탕으로, MethodArgumentNotValidException은 Spring에서 @Valid 애노테이션을 사용하여 요청 데이터의 검증 과정에서 빈 값 혹은 잘못된 형식의 데이터가 입력되었을 때 발생하는 예외입니다.

AOP의 @Around 어드바이스는 메서드 실행 전후로 추가적인 로직을 삽입할 수 있는데, @Validation 오류가 나는 것은 AOP가 작동하지 않기 때문이 아니라, 실제로 @Valid 애노테이션에 의해 검증이 실패하여 예외가 발생하기 때문입니다.

스프링 버전 업그레이드와는 별개로 @PostMapping 핸들러 메서드에서 유효성 검증을 수행할 때, AOP가 작동하기 전에 @Valid에 의해 입력 데이터가 먼저 검증되며, 이 과정에서 오류가 발생하면 해당 예외가 발생하여 핸들러 메서드로 제어가 넘어가지 않습니다. 따라서 AOP의 Pointcut 조건이 달라지는 것과는 무관하며, 오히려 유효하지 않은 요청 데이터 때문에 발생하는 문제로 보입니다.

올바른 해결을 위해서는 다음과 같은 점을 확인해야 합니다:

  1. @Valid를 사용하여 데이터 검증을 수행하기 전에 요청 데이터가 올바른지 확인해야 합니다.

  2. 만약, @Valid에 의한 검증을 AOP 로직 실행 후에 수행하고 싶다면, AOP의 Pointcut을 조정하거나 다른 방법을 고려해야 할 수도 있습니다.

  3. Spring Boot 버전을 업그레이드 했다면, 이와 관련된 변경 사항을 확인해보는 것도 좋을 것입니다.

더 자세한 정보는 Spring Boot Reference Documentation의 적절한 섹션을 참고하시길 바랍니다.

0

강프로그래머

말씀해주신 내용과 다르게

강의에서는 @Valid를 사용했을 때 유효성 검증을 수행하기 전에 @Around 어드바이스에서 먼저 실행되었습니다.

 

그래서 여러가지로 테스트 결과

@RequestBody 애노테이션과 BindingResult bindingResult를 매개변수로 받을 경우에는

@Around 어드바이스에서 먼저 실행되지만

 

@RequestPart일 경우에는 말씀해주신 이유로 @Valid가 먼저 실행되는 것 같습니다

방법이 있는지 찾아봐야될 것 같습니다..ㅠㅠ

요청/응답 DTO 관련 문의

0

170

2

안녕하세요 인증이 필요한 url을 위하여 /s를 붙이는것에 대해 질문있습니다.

0

161

1

validation aop사용에 대해서 질문있습니다.

0

245

2

Dummy 클래스 위치에 대한 질문

0

293

2

테스트 방식에 관해서 질문이 있어요

0

292

2

equals와 longValue 관련 질문드립니다

0

328

1

계좌번호를 Long 타입으로 하는 이유가 무엇일까요?!

0

499

2

[정보공유] Hibernate 로그 작동 안하시는 분들!!

3

346

0

UserControllerTest 테스트 실패 문의

0

318

1

스프링 시큐리티 6.2 버전 이후로 apply() 메서드를 이용한 JwtAuthenticationFilter 가 등록이 안됩니다.

2

1106

1

import 오류

0

426

3

spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져

0

438

2

안녕하세요 로그엔 성공적으로 들어온것같습니다..

0

237

1

JwtAuthorizationfilter test mvc.performget 관련 질문입니다!

0

286

1

JwtAuthorizationfilter test mvc.performget 부

0

226

1

longValue() 질문

0

228

1

jwt 인가필터 규현및 등록

0

334

1

스프링부트 3버전

1

334

1

권한처리를 위한 세션강제주입

0

418

1

JwtVO 를 인터페이스로 만든 이유

0

359

1

계좌 조회 질문드립니다

0

229

1

DummyObject 에 대하여

0

308

2

DTO를 이너클래스로 계속추가하는 이유

0

695

2

Builder 사용 궁금

0

404

1