티스토리 뷰

백엔드/SPRING MVC

Spring Type Converter (타입 형변환)

거북이의 기술블로그 2024. 10. 8. 15:46
spring type converter..

 

타입 변환 필요 예시

  • 스프링 MVC 요청 파라미터
    • @RequestParam
    • @ModelAttribute
    • @PathVariable
  • @Value 등으로 YML 정보 읽기
  • XML에 넣은 스프링 빈 정보 변환
  • View를 렌더링할 때

 

Converter Interface

public interface Converter<S, T> {
    @Nullable
    T convert(S source);
}
  • S -> T 로 변환
  • 원하는 타입에 맞추어서 변환 가능
// Member.class

@Getter
@AllArgsConstructor
public class Member{
    private String memberName;
    private Integer memberNum;
}

// StringToMemberConverter.class
public class StringToMemberConverter implements Converter<String, Member>{
    
    @Override
    public Member converter(String source){
        // Spring:10
        String[] split = source.split(":");
        String name = split[0]
        Integer num = Integer.parseInt(split[1]);
        
        return new Member(name, num);
    }
}

// MemberToStringConverter.class
public class StringToMemberConverter implements Converter<Member, String>{
    
    @Override
    public String converter(Member source){
        // Spring:10
        return source.getMemberName() + ":" + source.getMemberNum();
    }
}

 

  • Conversion Service를 이용한 테스트
    • DefaultConverSionService 는 .addConverter로 등록이 가능하게 해줌
    • 또한, 사용자의 입장에서 구체적인 구현 요소를 몰라도 됨 (ISP 원칙 준수)
public class ConversionServiceTest {
    
    @Test
    void conversionService() {
        DefaultConversionService conversionService = new DefaultConversionService();
        
        conversionService.addConverter(new StringToMemberConverter());
        conversionService.addConverter(new MemberToStringConverter());
    }
    
    Member member = conversionService.convert("Spring:10",Member.class);
    
    Assertions.assertThat(member).isEqualTo(new Member("Spring",10));
    
}

 

Conversion Service (Converter 등록)

  • Converter를 만든 것을 Conversion을 이용해서 등록하고 손쉽게 사용할 수 있도록 하는 서비스
  • @Configuration을 이용해서 등록
@Configuration
public class WebConfig implements WebMvcConfigurer {
     
     @Override
     public void addFormatters(FormatterRegistry registry) {
         
         registry.addConverter(new StringToMemberConverter());
         registry.addConverter(new MemberToStringConverter());
     
     }
}

 

 

'백엔드 > SPRING MVC' 카테고리의 다른 글

파일 업로드  (1) 2024.10.08
Formatter (포맷터)  (0) 2024.10.08
예외처리 (API)  (0) 2024.10.07
예외처리 (web page)  (0) 2024.10.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함