πŸ˜€
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • μ§„ν–‰ν•˜κΈ°μ— μ•žμ„œ..
    • Code Review History
      • ν•œλ°© 쿼리 vs μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 쑰립
      • DBμ—μ„œ TIMESTAMP와 DATETIME νƒ€μž…μ˜ 차이
      • ServiceλŠ” μ–΄λ–€ dtoλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν• κΉŒ?
        • ν™•μž₯ 질문
  • Legacy
    • 싀무 κ²½ν—˜ & 팁
      • Kotlin
        • 파일 μ‘°μž‘ν•˜κΈ°
      • Infra
        • Lightsail
          • μΈμŠ€ν„΄μŠ€ ꡬ성 예제
        • 곡인 ip ν™•μΈν•˜κΈ°
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • 정적 λ¬Έμ„œ 내보내기
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request μΆ”μ ν•˜κΈ° with HAR File
    • Study
      • Language
        • Java
          • Copy
          • λ©”λͺ¨λ¦¬ 관리
          • Garbage Collection
          • 자료ꡬ쑰
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql μ„€μ •μ˜ 단점
          • @GeneratedValue strategy
          • Entity의 field type
        • Logback
          • κΈ°λ³Έ μ„€μ •
        • Monitoring
          • VisualVM
            • μ„€μΉ˜
            • λ¬Έμžμ—΄ μƒμ„±μœΌλ‘œ ν…ŒμŠ€νŠΈ
          • nGrinder
      • Database
        • MySQL
          • SQL λ¬Έ μˆ˜ν–‰ 절차
          • νŠΈλžœμž­μ…˜κ³Ό 잠금
          • 인덱슀
      • Infra
        • AWS
          • S3
            • μš©μ–΄
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP ꡬ성
            • HTTP κ·Έμ™Έ
          • REST API
            • GET λ©”μ„œλ“œμ— payloadλ₯Ό μ‚¬μš©ν•΄λ„ λ˜λŠ”κ°€?
            • νŠΉμ • λͺ©μ μ˜ APIλŠ” μ–΄λ–»κ²Œ λ§Œλ“€μ–΄μ•Ό ν• κΉŒ?
          • TCP / UDP
          • μΈν„°λ„·μ˜ μž‘λ™ 원리
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • ν•œ λ²ˆμ— λλ‚΄λŠ” Spring μ™„.μ „.판 초격차 νŒ¨ν‚€μ§€ Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot 버전별 λ³€ν™”
          • SpEL, Spring Expression Language
          • Validation
        • μ΄νŽ™ν‹°λΈŒ μžλ°” 3판
          • 2μž₯ 객체 생성과 파괴
            • μ•„μ΄ν…œ 1. μƒμ„±μž λŒ€μ‹  정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œλ₯Ό κ³ λ €ν•˜λΌ
            • μ•„μ΄ν…œ 2. μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ
            • μ•„μ΄ν…œ 3. private μƒμ„±μžλ‚˜ μ—΄κ±° νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ λ³΄μ¦ν•˜λΌ
            • μ•„μ΄ν…œ 4. μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €κ±°λ“  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ
            • μ•„μ΄ν…œ 5. μžμ›μ„ 직접 λͺ…μ‹œν•˜μ§€ 말고 의쑴 객체 μ£Όμž…μ„ μ‚¬μš©ν•˜λΌ
            • μ•„μ΄ν…œ 7. λ‹€ μ“΄ 객체 μ°Έμ‘°λ₯Ό ν•΄μ œν•˜λΌ
          • 3μž₯ λͺ¨λ“  객체의 곡톡 λ©”μ„œλ“œ
            • μ•„μ΄ν…œ 11. equalsλ₯Ό μž¬μ •μ˜ν•˜λ €κ±°λ“  hashCode도 μž¬μ •μ˜ν•˜λΌ
            • μ•„μ΄ν…œ 12. toString을 항상 μž¬μ •μ˜ν•˜λΌ
            • μ•„μ΄ν…œ 14. Comparable을 κ΅¬ν˜„ν• μ§€ κ³ λ €ν•˜λΌ
          • 4μž₯ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
      • Webinar
        • μš”μ¦˜ νž™ν•œ μŠ€νƒ€νŠΈμ—…μ˜ DBDB DEEPν•œ 이야기
Powered by GitBook
On this page
  • Converter<S, T> Interface
  • Formatter

Was this helpful?

Edit on GitHub
  1. Legacy
  2. Study
  3. Book & Online Class
  4. ν•œ λ²ˆμ— λλ‚΄λŠ” Spring μ™„.μ „.판 초격차 νŒ¨ν‚€μ§€ Online

Data Binding

μ‚¬μš©μžλ‚˜ μ™ΈλΆ€ μ„œλ²„μ˜ μš”μ²­ 데이터λ₯Ό νŠΉμ • 도메인 객체에 μ €μž₯ν•΄μ„œ Request 에 λ‹΄μ•„μ£ΌλŠ” 것을 λœ»ν•œλ‹€.

Converter<S, T> Interface

package org.springframework.core.convert.converter;

public interface Converter<S, T> {

    T convert(S source);
}

S(Source) νƒ€μž…μ„ λ°›μ•„ T(Target) νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” Interface

  • ν™œμš© 방법

// μš”μ²­
GET /user-info
x-auth-user : {"id":123, "name":"Paul"}

// μœ μ € 객체
public class XAuthUser {
    private int id;
    private String name;

    // the usual getters and setters...
}

@GetMapping("/user-info")
public UserInfoResponse getUserInfo(
	@RequestHeader("x-auth-user") XAuthUser xAuthUser){

	// get User Info logic here...
}
@Component
public class XAuthUserConverter implements Converter<String, XAuthUser> {
	@Override
	public XAuthUser convert(String source) {
		return objectMapper.readValue(source, XAuthUser.class);
	}
}

헀더에 λ‹΄κΈ΄ json ν˜•μ‹ λ¬Έμžμ—΄μ„ XAuthUser에 λ°”λ‘œ λ‹΄κ³  싢은 경우 Converter λ₯Ό Bean 으둜 등둝할 수 μžˆλ‹€..

이와 λΉ„μŠ·ν•˜κ²Œ PathParameter λ‚˜ 기타 νŠΉμˆ˜ν•œ 경우의 데이터λ₯Ό νŠΉμ • 객체에 λ‹΄κ³  싢은 경우

  • Converter λ₯Ό λ§Œλ“€μ–΄μ„œ Spring 에 Bean 으둜 등둝

  • μŠ€ν”„λ§ 내에 ConversionService λΌλŠ” λ‚΄μž₯된 μ„œλΉ„μŠ€μ—μ„œ Converter κ΅¬ν˜„μ²΄ Bean 듀을 Converter λ¦¬μŠ€νŠΈμ— 등둝

  • 외뢀데이터가 λ“€μ–΄μ˜€κ³ , Source Class Type β†’ Target Class Type 이 Converter 에 λ“±λ‘λœ ν˜•μ‹κ³Ό μΌμΉ˜ν•˜λ©΄ ν•΄λ‹Ή Converter κ°€ λ™μž‘ν•˜λŠ” 원리

Formatter

νŠΉμ • 객체 ↔ String κ°„μ˜ λ³€ν™˜μ„ λ‹΄λ‹Ή

  • Date ↔ String κ°„μ˜ λ³€ν™˜μ„ μˆ˜ν–‰ν•˜λŠ” Formatter

package org.springframework.format.datetime;

public final class DateFormatter implements Formatter<Date> {
    public String print(Date date, Locale locale) {
        return getDateFormat(locale).format(date);
    }

    public Date parse(String formatted, Locale locale) throws ParseException {
        return getDateFormat(locale).parse(formatted);
    }
		// getDateFormat λ“± 일뢀 κ΅¬ν˜„μ€ 핡심에 μ§‘μ€‘ν•˜κΈ° μœ„ν•΄ μƒλž΅... 
}
  • print API μš”μ²­μ— λŒ€ν•œ 응닡을 쀄 λ•Œ, Date ν˜•μ‹μœΌλ‘œ 된 데이터λ₯Ό νŠΉμ • locale 에 맞좘 String 으둜 λ³€ν™˜

  • parse API μš”μ²­μ„ λ°›μ•„μ˜¬ λ•Œ, String 으둜 된 "2021-01-01 13:15:00" 같은 λ‚ μ§œ ν˜•μ‹μ˜ 데이터λ₯Ό Date 둜 λ³€ν™˜ν•˜λ„λ‘ 함

Formatter 도 Converter 와 λ§ˆμ°¬κ°€μ§€λ‘œ Spring Bean 으둜 λ“±λ‘ν•˜λ©΄ μžλ™μœΌλ‘œ ConversionService 에 λ“±λ‘μ‹œμΌœμ£ΌκΈ° λ•Œλ¬Έμ— ν•„μš”μ— 따라 μžλ™μœΌλ‘œ λ™μž‘ν•˜κ²Œ λœλ‹€. (μš”μ²­/응닡 μ‹œ ν•΄λ‹Ή 데이터 νƒ€μž…μ΄ μžˆλŠ” 경우)

PreviousAOP, Aspect Oriented ProgrammingNextIoC(Inversion of Control), DI(Dependency Injection)

Last updated 3 years ago

Was this helpful?