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
- Graphql Client
- Sub Bytes
- Java Rest
- Unchecked Exception
- AfterMapping
- java
- requestheaderdto
- NoUniqueBeanDefinitionException
- WildFly
- Socket is closed
- tomcat jndi
- Java Graphql
- mapstruct
- Srping MVC
- Reading HttpServletRequest Multiple Times
- 상호 인증
- 이중정렬
- Checked Exception
- 개방 폐쇄 원칙
- 데이터 압축
- graphql
- Request Body 여러 번 사용
- try - with - resources
- 바이트 절삭
- Open Close Principal
- Jndi DataSource
- HandlerMethodArgumentResolver
- Tomcat DBCP
- mTLS
- Java Singleton
Archives
- Today
- Total
Developer Sang Guy
RequestHeader를 Handler 매개 변수로 바인딩(HandlerMethodArgumentResolver) 본문
요새 RequestHeader에 로직 처리시 필요한 정보를 전달해주는 케이스가 자주 보여 HandlerMethodArgumentResolver를 활용하여 Header를 Dto로 바인딩하여 처리하는 코드를 사용하게 되었다.
헤더 정보를 바인딩할 Request Header Dto 객체
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@Builder
@Getter
@ToString
public class RequestHeader {
private String id;
private boolean isMobile;
}
Handler에 매개 변수로 Request Header Dto를 사용하기 위해 Resolver 구현
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import com.inicis.loan.dto.RequestHeader;
public class RequestHeaderResolver implements HandlerMethodArgumentResolver {
/* Controller에서 매개 변수로 사용할 타입 체크 */
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(RequestHeader.class);
}
/* 매개 변수 객체 바인딩 */
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return RequestHeader.builder()
.id(webRequest.getHeader("X-Request-Id"))
.isMobile(checkMobile(webRequest.getHeader("User-Agent")))
.build();
}
private boolean checkMobile(String userAgent) {
String[] mobiles = {"iphone", "ipad", "ipod", "android"};
for (String mobile : mobiles) {
if (userAgent.toLowerCase().contains(mobile)) {
return true;
}
}
return false;
}
}
Web Mvc 구성에 추가
import java.util.List;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.inicis.loan.dto.resolver.RequestHeaderResolver;
@Configuration
public class WebConfigure implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new RequestHeaderResolver());
}
}
테스트 Controller
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.inicis.loan.dto.RequestHeader;
@RestController
public class TestController {
@GetMapping("/header")
public String resolverTest(RequestHeader header) {
return header.toString();
}
}
'Spring' 카테고리의 다른 글
HttpServletRequest Body 여러 번 읽기 (0) | 2022.12.28 |
---|---|
[Spring] RequestMapping 기능 (produces, consumes ) (0) | 2022.10.07 |
[Spring Boot] DB 연결 (0) | 2022.09.28 |
[Spring] Aop, Logback 활용 (0) | 2022.04.28 |
스프링 WebMvcConfigurer (0) | 2021.08.08 |
Comments