JSON은 객체를 String으로 encoding 시킴
Serialization : convert Object into String
Deserialization : convert String into Object
필요한 이유 : 데이터를 전송하거나 파일에 저장할 때 데이터는 byte string 형태이어야 하는데, 복잡한 객체들의 경우 그렇지 않은 경우가 존재함. Serialization은 복잡한 객체들을 byte string으로 변환해줌. 수신자는 전달받은 byte string을 object로 복원해야 하는데 이러한 과정을 Deserialization이라고 함.
참고)
stackoverflow-what-is-deserialize-and-serialize-in-json
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
@NotNull
@Size(min = 3, max = 50)
private String name;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@NotNull
@Size(min = 3, max = 100)
private String password;
@NotNull
@Size(min = 3, max = 50)
private String nickname;
}
@JsonProperty(accss = ) :
속성에 대한 serialization("read")과 deserialization("write") 시 접근 처리를 구체화한 것임. JsonIgnore과 같이 사용할 때 JsonIgnore이 더 우선시됨.
WRITE_ONLY :
Serialization("read") 시에는 해당 속성이 포함되지 않고, Deserialization("write") 시에만 접근이 허용됨
즉 위의 코드의 경우를 보면, 사용자를 생성하기 위한 요청(Request) 본문을 처리할 때는 password가 포함되고, 응답(Response)결과를 생성할 때는 password는 제외되어 응답 본문에 표시되지 않게 됨
참고)
https://fasterxml.github.io/jackson-annotations/javadoc/2.6/com/fasterxml/jackson/annotation/JsonProperty.Access.html
https://eglowc.tistory.com/28