Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react react-router-dom v6
- react
- react Quill
- 텍스트가 많은 경우
- spring
- JPA Update\
- spring builder
- react link
- javascript 기초
- spring security
- javascript 함수
- javascrpit 기초
- springbatch
- springbatch chunk
- SpringBatch 스키마
- editor Quill
- step 테이블
- Spring Controller return
- react jsx if
- Javascript
- Docker Windows 설치
- Spring Entity
- 코드 중복제거
- Spring DTO
- react quill custom
- Spring JPA
- Spring CORS
- react forwardRef
- react Page
- JPA Insert
Archives
- Today
- Total
천천히 알아보는 코딩공부
ArgumentResolver 사용하기 본문
✅ Spring이 기본으로 제공하는 Resolver 예시
RequestParamMethodArgumentResolver | @RequestParam |
PathVariableMethodArgumentResolver | @PathVariable |
RequestBodyMethodArgumentResolver | @RequestBody |
ModelAttributeMethodProcessor | @ModelAttribute, 폼 데이터 |
ServletRequestMethodArgumentResolver | HttpServletRequest, HttpSession 등 |
- 컨트롤러에서 쿼리 스트링을 변수에 바인딩하려면 @RequestParam 을, 가변적인 경로를 변수에 바인딩하려면 @PathVariable 을, HTTP Body를 변수에 바인딩하려면 @RequestBody 를 사용
🌱 Spring MVC의 동작 흐름 속에서 ArgumentResolver의 위치
- 사용자가 /example?name=hana와 같은 요청을 보냅니다.
- DispatcherServlet이 요청을 받고, 적절한 컨트롤러 메서드를 찾습니다.
- 컨트롤러 메서드를 실행하기 위해, 파라미터들을 처리합니다.
- 이때, 각 파라미터마다 적절한 HandlerMethodArgumentResolver를 찾아서 실행합니다.
- Resolver가 적절한 데이터를 반환하면, 그 값을 컨트롤러 메서드의 파라미터로 넣습니다.
- 메서드 실행 후 리턴 값은 ViewResolver 등을 거쳐 사용자에게 응답됩니다.
🛠️ 커스텀 ArgumentResolver 만들기
장점
중복 제거 | 공통 로직을 한 곳에 모을 수 있음 |
가독성 향상 | 컨트롤러가 간결해짐 |
관심사 분리 (SoC) | 요청 파라미터 처리 로직 분리 가능 |
테스트 편의성 | 모듈별로 테스트 가능 |
코드 일관성 유지 | 팀 전체 코드 스타일 유지 |
사용 전 Contoller
@GetMapping("/mypage")
public String myPage(HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
return "Hello, " + user.getName();
}
사용 후 Contoller
@GetMapping("/mypage")
public String myPage(@LoginUser User user) {
return "Hello, " + user.getName();
}
🛠️ 커스텀 ArgumentResolver 예제
1. 애너테이션 정의
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
}
2. Resolver 구현
public class LoginUserArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(LoginUser.class) != null;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
return request.getSession().getAttribute("user");
}
}
3. 등록 (Spring에 알려주기)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new LoginUserArgumentResolver());
}
}
4. 사용
@GetMapping("/mypage")
public String myPage(@LoginUser User user) {
return "Hello, " + user.getName();
}
🎯 정리
- HandlerMethodArgumentResolver는 컨트롤러 메서드 파라미터에 값을 넣어주는 자동 주입기입니다.
- Spring은 기본적으로 여러 Resolver를 제공합니다.
- 직접 만들면 원하는 방식대로 값을 파라미터에 주입할 수 있습니다.
- supportsParameter()와 resolveArgument() 두 메서드를 잘 이해하면 됩니다.
'Java > SpringBoot' 카테고리의 다른 글
[Spring Security] AuthenticationProvider, OncePerRequestFilter (0) | 2025.02.04 |
---|---|
[Spring] JPA + Security + jwt 방식 (1) 개념 설명 (0) | 2023.02.09 |
[Spring] JPA 특정 컬럼 Update (0) | 2023.01.26 |
[Spring] JPA 전체 Insert, Update (0) | 2023.01.26 |
[Spring] Lombok 자주 사용하는 어노테이션 정리 (0) | 2022.12.02 |
Comments