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
- 백준
- Exception
- 자바
- http
- JDBC
- SpringBoot
- Servlet
- 그리디
- 인프런
- pointcut
- kotlin
- 스프링 핵심 기능
- java
- Greedy
- transaction
- spring
- Spring Boot
- AOP
- springdatajpa
- jpa
- 김영한
- db
- 스프링 핵심 원리
- 알고리즘
- Thymeleaf
- QueryDSL
- Proxy
- 스프링
- JPQL
- Android
Archives
- Today
- Total
개발자되기 프로젝트
[TypeConverter] Spring에Converter 적용 본문
1. Spring에 Converter 등록
- addFormatters() 이용
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToIntegerConverter());
registry.addConverter(new StringToIpPortConverter());
registry.addConverter(new IntegerToStringConverter());
registry.addConverter(new IpPortToStringConverter());
}
}
2. 사용
- controller
@GetMapping("/hello-v2")
public String helloV2(@RequestParam Integer data){
System.out.println("data = " + data);
return "ok";
}
- localhost:8080/hello-v2?data=10
- StringToIntegerConverter가 선택됨.
2021-10-01 23:16:09.402 INFO 21888 --- [nio-8080-exec-9] h.t.converter.StringToIntegerConverter
: convert source= 10
data = 10
- 어 근데 String->Integer는 내가 등록하지 않았어도 잘 쓰고 있었따.
- Spring 내부에는 다양한 Converter 제공함. String->Integer도 당연히 있음.
- 즉 별도로 추가한 Converter가 우선순위를 갖는다.
3. 직접 만든 converter 사용
- Controller
@GetMapping("/ip-port")
public String ipPort(@RequestParam IpPort ipPort){
System.out.println("ipPort.getIp() = " + ipPort.getIp());
System.out.println("ipPort.getPort() = " + ipPort.getPort());
return "ok";
}
- http://localhost:8080/ip-port?ipPort=127.0.0.1:8080
- @RequestParam으로 ipPort를 받는다.
- 따라서 queryParameter로 ipPort=127.0.0.1:8080을 넘겨준다.
- StringToIpConverter가 선택되었고, 변환도 의도대로 되었다.
2021-10-01 23:22:07.922 INFO 25672 --- [nio-8080-exec-1] h.t.converter.StringToIpPortConverter
: converter source = 127.0.0.1:8080
ipPort.getIp() = 127.0.0.1
ipPort.getPort() = 8080
- 처리 과정
- @RequestParam 은 @RequestParam 을 처리하는
- ArgumentResolver 인 RequestParamMethodArgumentResolver 에서
- ConversionService 를 사용해서 타입을 변환한다.
- 부모 클래스와 다양한 외부 클래스를 호출하는 등 복잡한 내부 과정을 거친다.
4. GitHub : 211001 Spring & Converter
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[TypeConverter] Formatter (0) | 2021.10.02 |
---|---|
[TypeConverter] View Template에 적용 (0) | 2021.10.02 |
[TypeConverter] conversionService (0) | 2021.10.01 |
[TypeConverter] Type Converter (0) | 2021.10.01 |
[TypeConverter] Spring Type Converter (0) | 2021.10.01 |
Comments