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 |
Tags
- 인턴 후기
- Layered Architecture
- Django
- jsp
- frontend
- EER
- restapi
- spring
- Forensic 절차
- PyAmdecoder
- 인턴 지원
- 메모리 포랜식
- 동읍면 DB
- DBMS
- 방명록 만들기
- 정보보호병 후기
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- 소프트웨어 개발보안 경진대회
- JSTL
- mysql
- webhacking 처음
- react
- 행정지역 DB
- 네이버 인턴
- reversing.kr
- 3단계 지역 DB
- 소개딩
- Database
- riceteacatpanda
- SessionAttribute
Archives
- Today
- Total
웹찢남
Spring - Argument Resolver 본문
Argument Resolver란?
- 컨트롤러의 메소드 인자로 사용자가 임의의 값을 전달하는 방법을 제공하고자 할 때 사용
- ex) 세션에 저장되어 있는 값 중 특정 이름의 값을 메소드 인자로 전달
작성 방법
- org.springframework.web.method.support.HandlerMethodArgumentResolver를 구현한 클래스 작성
- supportsParameter 메소드를 오버라이딩 한 후, 원하는 타임의 인자가 있는지 검사한 후 있을 때 True 리턴
- resolveArgument 메소드를 오버라이딩 한 후, 메소드의 인자로 전달할 값을 리턴
JavaConfig에 설정하는 방법
- WebMvcConfigurerAdapter를 상속받은 Java Config 파일에서 addArgumentResolvers 메소드를 오버라이딩 한 후 원 하는 Arguemtn Resolver 클래스 객체를 등록
XML 파일에 설정하는 방법
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="아규먼트리졸버클래스"</bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>
실습
HeaderInfo.java
package kr.or.connect.guestbook.argumentresolver;
import java.util.HashMap;
import java.util.Map;
public class HeaderInfo {
private Map<String, String> map;
public HeaderInfo() {
map = new HashMap<>();
}
public void put(String name, String value) {
map.put(name, value);
}
public String get(String name) {
return map.get(name);
}
}
HeaderMapArgumentResolver.java
package kr.or.connect.guestbook.argumentresolver;
import java.util.Iterator;
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;
public class HeaderMapArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType() == HeaderInfo.class;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HeaderInfo headerInfo = new HeaderInfo();
Iterator<String> headerNames = webRequest.getHeaderNames();
while(headerNames.hasNext()) {
String headerName = headerNames.next();
String headerValue = webRequest.getHeader(headerName);
// System.out.println(headerName + " , " + headerValue);
headerInfo.put(headerName, headerValue);
}
return headerInfo;
}
}
WebMvcContextConfiguration.java(추가)
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
System.out.println("아규먼트 리졸버 등록..");
argumentResolvers.add(new HeaderMapArgumentResolver());
}
Controller 추가
@GetMapping(path="/list")
public String list(@RequestParam(name="start", required=false, defaultValue="0") int start,
ModelMap model, @CookieValue(value="count", defaultValue="1", required=true) String value,
HttpServletResponse response,
HeaderInfo headerInfo) {
System.out.println("-----------------------------------------------------");
System.out.println(headerInfo.get("user-agent"));
System.out.println("-----------------------------------------------------");'BACK_END > Spring 공부' 카테고리의 다른 글
| Spring - 파일 업로드 & 다운로드 (0) | 2021.03.10 |
|---|---|
| Spring - 로깅 (0) | 2021.03.08 |
| Spring - 인터셉터 (0) | 2021.03.08 |
| Spring - Security (0) | 2021.03.04 |
| Spring - 상태유지기술 (0) | 2021.02.25 |
Comments