Springboot

Springboot/현제 진행중인 프로젝트에 AOP처리해보기/@ControllerAdvice사용

25G 2021. 12. 11. 14:21

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.4.4</version>
</dependency>

위 maven은 2.4.4 버전이다.

 

porm.xml에 의존성 추가.


validation 체크 관련 어노테이션은 해당 블로그가 굉장히 잘 돼있습니다.

참고하시면 좋을 것 같아요!.

https://bamdule.tistory.com/35

 

[Spring Boot] @Valid 어노테이션으로 Parameter 검증하기

java.validation의 @Valid 어노테이션 사용법 정리 글입니다. Spring Boot 라이브러리에서 기본적으로 탑재된 기능이며 따로 dependency해 줄 필요가 없습니다. Spring Boot Version은 2.2.2.RELEASE 입니다. 1. j..

bamdule.tistory.com


DB 스키마 밸리데이션 체크

javax.persistence 가 들고 있는 기능

으로 구성

@Column이 다 들고 있다. DB 스키마를 구성할 때 밸리데이션 체크를 하는 것이다.

 

벨리데이션 체크(자세한 설명은 위 블로그에 잘 나와있습니다!.(감사합니다)


벨리데이션 체크 사용 

그럼 위와 같이 밸리데이션 체크를 해서 오류가 난다면 핵심 로직이 실행되지 않고 분기를 시켜야 한다.

ResponseBody가 있기 때문에 파일이 아닌 데이터를 리턴한다.

@ResponseBody는 @controller에서 데이터를 응답하도록 한다.
해당 메서드는 데이터를 응답하기 때문에 파일을 리턴할 수 없다. 
그래서 컨트롤 어드바이스를 만들어서 처리해야 한다


@ControllerAdvice

 

 

주석이 핵심내용입니다.

위 코드에서의 문제점은 위 코드에서 getFiledErrors는 컬렉션 타입이라서 처리를 할 수 없다

그래서 exception을 커스텀 했습니다.

exception커스텀
@ControllerAdvice

 

벨리데이션 체크 후 분기하고 정상적인 요청일 때 파일 리턴하도록 코드 설계

@ResponseBody를 사용해서 데이터를 리턴하는 메서드로 설계하는 것이 아니라 파일을 리턴하는 메서드로 하고 return대신에 Exception을 날려서 분기를 하도록 하면 위 문제가 해결된다.

오류가 났을시에 다음과같이 리턴된다.