English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
@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 注解에 대한 몇 가지 질문(상세 설명)에 대해 소개하는 것이며, 여러분에게 참고가 되길 바라며, 다들呐喊 교본을 많이 지지해 주시길 바랍니다.