source

@JsonProperty 필드 및 getter/setter의 주석

manysource 2023. 2. 18. 20:50

@JsonProperty 필드 및 getter/setter의 주석

getter/setters에 @JsonProperty 주석이 있는 특정 비트코드를 상속했습니다.목적은 잭슨 라이브러리를 사용하여 개체를 직렬화할 때 필드에 특정 이름이 지정되도록 하는 것입니다.

현재 코드:

private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

이제 다른 도구의 경우 JsonProperty를 사용하여 필드에 주석을 추가해야 합니다.변경된 코드는 다음과 같습니다.

@JsonProperty("FILENAME")
private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

필드뿐만 아니라 게터/세터에도 동일한 주석을 사용한 적이 있습니까?인터넷을 둘러보았지만 아무것도 보이지 않았다.

코드를 컴파일하여 실행하고 있습니다만, 이것이 향후의 문제의 원인이 될지는 모르겠습니다.어떻게 생각해?

몇 가지 테스트를 통해 관찰한 바에 따르면, 소유권 이름과 다른 이름은 다음과 같습니다.

예를 들어, 케이스를 약간 수정해 주세요.

@JsonProperty("fileName")
private String fileName;

@JsonProperty("fileName")
public String getFileName()
{
    return fileName;
}

@JsonProperty("fileName1")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

둘다요.fileName필드 및 방법getFileName, 의 올바른 속성명을 가지고 있습니다.fileName그리고.setFileName다른 것을 가지고 있다fileName1이 경우, 잭슨은 한 가지 방법을 찾을 것입니다.fileName1역직렬화 시점에서 json 내의 속성을 생성한다.fileName1연재 시점에서는요.

이제 이 세 가지 @JsonProperty가 기본 속성 이름과 다른 경우를 살펴보겠습니다.fileName둘 중 하나를 속성으로 선택합니다.FILENAME3가지 중 하나가 다르면 예외로 간주됩니다.

java.lang.IllegalStateException: Conflicting property name definitions

기존의 좋은 답변 외에 잭슨 1.9는 "속성 통합"을 추가함으로써 처리 능력을 향상시켰다는 점에 유의하십시오. 즉, 논리적 속성의 다른 부분에서 나오는 모든 주석이 직관적인 우선 순위를 사용하여 결합된다는 것을 의미합니다.

Jackson 1.8 이전 버전에서는 직렬화할 항목과 방법을 결정할 때 필드 주석과 게터 주석만 사용되었으며, 역직렬화(JSON 읽기)에는 및 세터 주석만 사용되었습니다.이를 위해 getter와 setter 모두에 주석을 다는 것과 같은 "추가" 주석을 추가해야 하는 경우가 있었습니다.

Jackson 1.9 이상에서는 이러한 추가 주석이 필요하지 않습니다.이러한 이름을 추가할 수도 있습니다.다른 이름을 사용하는 경우 "분할" 속성을 생성할 수 있습니다(한 이름을 사용하여 직렬화, 다른 이름을 사용하여 직렬화 해제). 이것은 이름을 변경할 때 가끔 유용합니다.

언급URL : https://stackoverflow.com/questions/11526874/jsonproperty-annotation-on-field-as-well-as-getter-setter