Java프로그래밍

[JAVA] @JsonIgnore (Swagger 테스트시 무시)및 @JsonProperty 어노테이션 사용방법 (Jackson 어노테이션)

Swagger로 Api를 테스트할 때 dto(VO) 클래스에 선언된 변수들 중에 임시로 사용하는 변수가 있거나 혹은 입력인자로 사용되지 않는 변수가 있다면 @JsonIgnore 어노테이션을 선언한 변수 위에 추가해주면 된다.

Jackson 어노테이션

@JsonIgnore
-특정 필드를 JSON 직렬화 및 역직렬화에서 무시하도록 할때 사용. 스웨거 테스트시에도 해당변수는 보이지않게된다.

@JsonProperty
-특정 필드의 JSON 속성 이름을 명시적으로 지정하는 데 사용. 테이블 컬럼중에 START_T_NO, A_DO 와 같이 한자리의 영문자가 있을때 카멜타입으로 변환 후 넥사크로 UI에서 해당 데이터를 받아오지 못할때 사용하면 해결할 수 있다.

@JsonFormat
-날짜나 시간 형식을 지정하는 데 사용.

UserDto 클래스

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Data
public class UserDto {
    @JsonProperty(“firstName”)
    public String firstName;

    @JsonProperty(“lastName”)
    public String lastName;

    @JsonProperty(“dateOfBirth”)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = “yyyy-MM-dd HH:mm:ss”)
    public Date dateOfBirth;

    @JsonIgnore
    public String password;
}




TEST 클래스

import java.util.Date;
import com.test.UserDto;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TEST {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        UserDto user = new UserDto();
        user.setFirstName(“아”);
        user.setLastName(“이유”);
        user.setDateOfBirth(new Date());
        user.setPassword(“test1234”);

        // JSON 직렬화
        String jsonString = mapper.writeValueAsString(user);
        System.out.println(“Serialized JSON: ” + jsonString);

        // JSON 역직렬화
        String inputJson = “{\”firstName\”:\”아\”,\”lastName\”:\”이유\”,\”dateOfBirth\”:\”2024-06-20 13:20:30\”}”;


        UserDto deserializedUser = mapper.readValue(inputJson, UserDto.class);
        System.out.println(“Deserialized User”);
        System.out.println(“First Name: ” + deserializedUser.getFirstName());
        System.out.println(“Last Name: ” + deserializedUser.getLastName());
        System.out.println(“Date of Birth: ” + deserializedUser.getDateOfBirth());
    }
}



UserDto 객체를 JSON 문자열로 변환(직렬화) 후 출력 결과는 다음과 같다.

{“firstName”:”아”,”lastName”:”이유”,”dateOfBirth”:”2024-06-20 13:20:30″}



JSON 역직렬화

JSON 문자열을 UserDto 객체로 변환(역직렬화) 예제

String inputJson = “{\”firstName\”:\”John\”,\”lastName\”:\”Doe\”,\”dateOfBirth\”:\”2024-06-20 13:20:30\”}”;

UserDto deserializedUser = mapper.readValue(inputJson, UserDto.class);

error: Content is protected !!