[위 에 올 리 기] FastJSon 중 @ JSONfield 주석 사용

http://www.cnblogs.com/dupang/p/6098930.html
@JSONField
 
  
 

看源码它可以作用于字段和方法上。

引用网上说的,

 
 

  一、作用Field

 
 

       @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。

 

但是我在使用中,发现并不如上所说。

例如

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

发现bean 转json的时候并是"project_id":xxx的形式,json转bean的时候也不会把"project_id":xx的内容设置到ProjectID的里面。

fastjson的版本是1.1.15

  二、作用在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;
    }

 
 
 
   、@JSONField    ,

@JSONField , name , format,serialize,deserialize,serialzeFeatures,parseFeatures

format, Date 형식의 필드 에서 시간 형식 을 포맷 하 는 것 이 유용 할 것 같 습 니 다.
serialize 와 deserialize 는 불 유형 이 고 용법 은 이다.
@JSONField(serialize=false) 
private Long ProjectID

서열 화 할 때 이 필드 를 포함 하지 않 는 다 는 것 이다.deserialize 는 반대 입 니 다.그러나 주의해 야 할 것 이 있 습 니 다. 다른 곳 에서 볼 때 필드 가 final 일 때 주 해 를 필드 에 두 는 것 은 효과 가 없 으 며 이 럴 때 get 에 두 어야 합 니 다.
set 방법 상.
serialze Features, 나 는 이 속성 을 사용 합 니 다. 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 은 서열 화 된 규칙 을 제어 할 수 있 도록 해 준다.이것 은 Serializer Feature 를 사 용 했 습 니 다. 이것 은 매 거 진 것 입 니 다. 그 안에 여러 가지 가치 가 있 습 니 다. 구체 적 인 의 미 는 여러분 이 관심 이 있 는 것 을 알 수 있 습 니 다.
나 는 그 중 하 나 를 썼 을 뿐,
@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
private String value;

이렇게 하면 value 의 값 이 null 일 때 도 값 을 정렬 합 니 다.바로 아래 의 모습, 이것 이 바로 내 가 원 하 는 결과 이다.
{"fieldName":"project_id","operator":"is not","value":null}

 
 
          ,      int   , 
    private int start;
    private int limit;
 
 

我如果不set值的时候,会序列化为下面这样

"limit":0,"start":0

기본 값 은 0 이 고 내 목 표 는 값 을 설정 하지 않 으 면 나타 나 지 않 는 다 는 것 이다.
나 는 간단하게 그들의 유형 을 Integer 로 바 꾸 었 다.사용자 정의 직렬 화 행 위 를 통 해 해결 하 는 다른 방법 이 있어 야 하 며, 잠시 연구 하지 않 는 다.

좋은 웹페이지 즐겨찾기