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 에 λ“±λ‘μ‹œμΌœμ£ΌκΈ° λ•Œλ¬Έμ— ν•„μš”μ— 따라 μžλ™μœΌλ‘œ λ™μž‘ν•˜κ²Œ λœλ‹€. (μš”μ²­/응닡 μ‹œ ν•΄λ‹Ή 데이터 νƒ€μž…μ΄ μžˆλŠ” 경우)

Last updated

Was this helpful?