English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

fastjson의 @JSONField 어노테이션에 대한 몇 가지 질문(상세 설명)

@JSONField

원본 코드를 보면 필드와 메서드에 적용될 수 있습니다.

인터넷에서 말하는 것을 인용하면

一、기능 Field

@JSONField 필드에 적용될 때, name은 입력 키의 이름을 정의하는 것 외에도 출력 이름도 정의합니다.

그러나 제 사용 경험에서는 그렇지 않다는 것을 발견했습니다.

예를 들어

@JSONField(name="project_id")
private Long ProjectID

bean을 json으로 변환할 때 "project_id":xxx 형식이 아닌 것을 발견했으며, json을 bean으로 변환할 때도 "project_id":xx의 내용이 ProjectID에 설정되지 않습니다.

fastjson의 버전은1.1.15

2. setter와 getter 메서드에 적용됩니다. 이 방식은 사용 중에 기대와 일치합니다.

/**bean을 json으로 변환할 때 bean의 ProjectID가 project_id로 변환됩니다 */
  @JSONField(name="project_id")
  public Long getProjectID() {
    return ProjectID;
  }
/**json을 bean으로 변환할 때 json의 project_id 값이 ProjectID에 할당됩니다*/
  @JSONField(name="project_id")
  public void setProjectID(Long projectID) {
    ProjectID = projectID;
  }

3. @JSONField의 다른 사용법, @JSONField 애노테이션의 소스 코드를 확인하면, name 외에도 format, serialize, deserialize, serialzeFeatures, parseFeatures가 사용할 수 있습니다

•formatDate 타입 필드의 시간 형식을 포맷하는 데 유용하게 사용됩니다.

•serializeserialize와 deserialize는 보이는 타입입니다. 사용법은 다음과 같습니다

@JSONField(serialize=false) 
private Long ProjectID

시리얼라이즈할 때 해당 필드를 포함하지 않습니다. deserialize는 반대입니다. 그러나 주의해야 할 점은, 다른 곳에서 필드가 final 일 때에는 필드에 추가된 애노테이션은 작용하지 않으며, 이 경우 get에 추가해야 한다는 점입니다

또는 set 메서드에 있습니다.

•serialzeFeatures이 속성을 사용하고 있습니다, fastjson의 기본 시리얼라이즈 규칙은 필드의 값이 null 일 때 그 필드를 시리얼라이즈하지 않습니다. 예를 들어, 저는 이렇게한 요구사항이 있습니다

{"fieldName":"project_id","operator":"is not","value":null}

한 개의 객체를 이렇게 시리얼라이즈하려면, 제 코드는 다음과 같습니다

CriteriaVO criteriaVO = new CriteriaVO();
    criteriaVO.setFieldName("project_id");
    criteriaVO.setOperator("is not");
    criteriaVO.setValue(null);

기본적으로는 다음과 같은 결과로 시리얼라이즈됩니다

{"fieldName":"project_id","operator":"is not"}

물론 fastjson은 시리얼라이즈 규칙을 조금은 제어할 수 있습니다.

이는 SerializerFeature를 사용하는 것이며, 이는 여러 가지 값을 가진 enum입니다. 자세한 내용에 대해 관심이 있으시면 알아보세요.

저는 그 중 하나만 사용했습니다.

@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
private String value;

이렇게 value의 값이 null일 때, 여전히 그 값을 시리얼라이즈합니다. 이것이 바로 제가 원하는 결과입니다

{"fieldName":"project_id","operator":"is not","value":null} 

다시 한 번 문제를 만났습니다. int 타입의 필드 타입이면, 예를 들어

private int start;
private int limit;

저는 값을 설정하지 않았을 때, 다음과 같이 시리얼라이즈됩니다

"limit":0,"start":0

기본적으로 모두 0으로 설정되어 있으며, 제 목표는 값을 설정하지 않았을 때 그들이 나타나지 않도록 하기 위해 합니다.

저는 그들의 타입을 Integer으로 변경하는 방식으로 간단하게 처리했습니다. 다른 방식으로 직접 시리얼라이즈 comportment을 설정하는 방법도 있지만, 현재는 연구하지 않을 것입니다.

이 글은 fastjson의 @JSONField 注解에 대한 몇 가지 질문(상세 설명)에 대해 소개하는 것이며, 여러분에게 참고가 되길 바라며, 다들呐喊 교본을 많이 지지해 주시길 바랍니다.

좋아하는 것