package org.example.hellospringboot.model;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(value=PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
private String name;
private Integer userAge; //int를 사용하면 아무런 값이 없을 때 0으로 표현됨. Integer 사용하면 null
private String email;
private Boolean isKorean;
}
@SpringBootTest
class HelloSpringbootApplicationTests {
@Autowired
private ObjectMapper objectMapper;
@Test
void contextLoads() throws JsonProcessingException {
var user = new UserRequest();
user.setName("홍길동");
user.setUserAge(20);
user.setEmail("hong@gmail.com");
user.setIsKorean(true);
var json = objectMapper.writeValueAsString(user);
System.out.println(json);
var dto = objectMapper.readValue(json, UserRequest.class);
System.out.println(dto);
}
}
실습은 test에서 진행했음.
writeValueAsString()으로 직렬화, readValue()로 역직렬화를 할 수 있음.
오브젝트 매퍼는 메소드에 매칭되어 동작한다.
오브젝트 매퍼는 직렬화를 해줄 때 get이라는 이름이 들어간 메소드를 참고한다.
오브젝트 매퍼는 리플렉션 기반으로, private으로 막아도 동작한다.