Posts converter
Post
Cancel

converter

controller 인자로 enum 받는 문제를 해결했던 것은 enum 타입에 맞춘 Converter를 bean에 등록하는 것이었다. 단순히 bean에 등록하는 것으로 controller에서 httpConverter 동작할 때 이것을 적용한 것이다. 이 뒤에 무엇이 있을까 하여 조사해보았다.

스프링에서는 기본적인 타입 변환은 자동으로 지원한다. 따라서 파라미터로 넘어온 문자 데이터가 컨트롤러에서 직접 Integer 타입으로 변환된다.

1
2
3
@GetMapping(path = "/{articleId}")
public String getArticleDetail(@PathVariable long articleId) {
  ...

위와 같이 파라미터로 넘어온 문자데이터를 long 타입으로 받아도 스프링에서는 자동으로 변환시켜주기에 문제 없다.

하지만 지원하지 않는 타입도 존재한다. 이럴땐 Converter 인터페이스를 사용하면 된다. 이때 주의할 것이 아래 경로의 Converter를 가져와야한다.

org.springframework.core.convert.converter.Converter

Converter는 두 개의 제네릭을 받는다. 첫번째는 입력 타입이고, 두번째는 반환 타입이다.

1
public class SearchTypeConverter implements Converter<String, SearchType>

Converter를 적용하려면 convert 메서드를 오버라이드하고, 스프링 빈에 등록해야한다.

1
2
3
4
5
6
7
@Component
public class SearchTypeConverter implements Converter<String, SearchType> {
	@Override
	public SearchType convert(String value) {
		return SearchType.valueOf(value.toUpperCase());
	}
}

이렇게 등록을 하고 나면 스프링에서 해당 입력 타입을 반환타입으로 convert 해야할 때 등록한 메서드가 사용된다.

This post is licensed under CC BY 4.0 by the author.

controller에서 enum을 인자로 받기

Pure DI - IoC가 없는 DI

Comments powered by Disqus.