Struts - json - plugin 사용 설명서 (공식 문서 번역)

12936 단어 jsonstruts2
인터넷 에서 struts - json - plugin - xx. jar 의 소스 코드 를 찾기 위해 서 는 정말 큰 힘 을 들 였 습 니 다. 결국 소원 을 이 루 지 못 했 습 니 다. 마지막 으로 Apache-SVN 지난 페이지 의 소스 코드 를 넘 겨 서 지난 글 을 완성 할 수 밖 에 없 었 습 니 다. 정말 비참 합 니 다. 하지만 모든 일이 항상 그 렇 지 않 습 니까? 절대 - 이것 도 삶 의 매력 이 라 고 생각 합 니 다.뜻밖에도 나 로 하여 금 무심코 아파 치 홈 페이지 에 있 는 struts - json - plugin 사용 설명 문서 에 관 한 한 편 을 발견 하 게 했다. 매우 상세 하고 전면적 이 며 배치 설명 뿐만 아니 라 범례 프로젝트 도 있 으 니 빨리 꺼 내 서 여러분 과 공유 하 세 요.
 
JSON 플러그 인 은 "json" 결과 형식 을 제공 하여 action 을 JSON 으로 정렬 합 니 다. 이 직렬 화 과정 은 재 귀적 입 니 다. 즉, 전체 대상 그림 입 니 다. action 류 부터 (기본 클래스 포함 되 지 않 음) 직렬 화 됩 니 다 ("root" 속성 으로 자신의 루트 대상 을 지정 할 수 있 습 니 다). json 차단 기 를 사용 하면 action 은 요청 한 JSON 내용 을 통 해 조립 할 수 있 습 니 다.이 차단 기 는 다음 과 같은 몇 가지 규칙 을 따른다.
  • "content - type" 은 "application / json"
  • 이 어야 합 니 다.
  • JSON 내용 은 격식 이 양호 해 야 합 니 다. json.org 중의 문법 을 참고 하 십시오.
  • Action 에 서 는 값 을 얻 으 려 는 속성 에 해당 하 는 Public 의 "setter" 방법 이 있어 야 합 니 다.
  • 지원 하 는 유형 은 원본 형식 (int, long... String), Date, List, Map, 원본 형식 배열, 기타 클래스 (더 많은 지원) 와 다른 유형의 배열 입 니 다.
  • JSON 의 list 나 map 에 채 워 질 대상 은 Map 형식 (속성 맵 값) 이 고 모든 정 수 는 Long 형식 이 며 모든 소 수 는 Double 형식 이 며 모든 배열 은 List 형식 입 니 다.
  • 다음 JSON 문자열 을 지정 합 니 다:
     
    {
       "doubleValue": 10.10,
       "nestedBean": {
          "name": "Mr Bean"
       },
       "list": ["A", 10, 20.20, {
          "firstName": "El Zorro"
       }],
       "array": [10, 20] 
    }
    

     
    action 에는 "setDoubleValue" 방법 이 있어 야 합 니 다. 매개 변 수 는 "float" 또는 "double" (차단기 가 값 을 해당 하 는 형식 으로 변환 합 니 다) 입 니 다. "setNestedBean" 방법 도 있어 야 합 니 다. 매개 변 수 는 모든 종류 로 할 수 있 습 니 다. 그 중에서 "String" 인 "setName" 방법 이 포함 되 어 있 습 니 다. "List" 인 "setList" 방법 도 있어 야 합 니 다.이 List 에는 "A" (String), 10 (Long), 20.20 (Double), Map ("firstName" - > "El Zorro") 이 포 함 됩 니 다. "setArray" 방법 은 "List" 또는 모든 숫자 형식의 배열 을 매개 변수 로 할 수 있 습 니 다.
    대상 을 자바 script 의 JSON 으로 정렬 합 니 다. 참고 json2
    설치 하 다.
    이 플러그 인 은 응용 프로그램의 / WEB - INF / lib 디 렉 터 리 에 플러그 인 jar 를 패키지 하여 설 치 를 완료 할 수 있 습 니 다. 복사 하거나 만 들 파일 이 없습니다.
    maven 을 사용 하면 다음 pom 에 추가 합 니 다:
     
     
    <dependencies>
       ...
       <dependency>
           <groupId>org.apache.struts</groupId>
           <artifactId>struts2-json-plugin</artifactId>
           <version>STRUTS_VERSION</version>
       </dependency>
       ...
    </dependencies>
    

     
    맞 춤 형 직렬 화 와 반 직렬 화
    JSON 주 해 를 사용 하여 맞 춤 형 직렬 화 와 반 직렬 화 과정 을 달성 합 니 다. 사용 가능 한 JSON 주 해 는 다음 과 같 습 니 다.
     
     
    이름 설명 기본 값 직렬 화 반 직렬 화
    name
    맞 춤 형 필드 이름
    empty
    yes
    no
    serialize
    표 지 는 직렬 화 될 수 있다.
    true
    yes
    no
    deserialize
    표 지 는 역 직렬 화 될 수 있다.
    true
    no
    yes
    format
    Date 필드 의 형식 을 포맷 하거나 해석 할 때 사용 합 니 다.
    "yyyy-MM-dd'T'HH:mm:ss"
    yes
    yes
     
     
    속성 제거
     
    쉼표 로 구 분 된 정규 표현 식 목록 은 JSON Result 와 Interceptor (차단기) 에 전 달 됩 니 다. 정규 표현 식 과 일치 하 는 속성 은 직렬 화 과정 에서 무 시 됩 니 다.
     
    <!-- Result fragment -->
    <result type="json">
      <param name="excludeProperties">
        login.password,
        studentList.*\.sin
      </param>
    </result>
    
    <!-- Interceptor fragment -->
    <interceptor-ref name="json">
      <param name="enableSMD">true</param>
      <param name="excludeProperties">
        login.password,
        studentList.*\.sin
      </param>
    </interceptor-ref>
    

     
    속성 포함
    쉼표 로 구 분 된 정규 표현 식 목록 은 JSON Result 에 전 달 됩 니 다. 어떤 속성 이 직렬 화 에 사용 되 는 지 제한 합 니 다. 정규 표현 식 과 일치 하 는 속성 만 직렬 화 출력 에 포 함 됩 니 다.
    주: 속성 표현 식 을 제외 하 는 것 은 속성 을 포함 하 는 표현 식 보다 우선 합 니 다. 즉, 표현 식 을 포함 하고 배제 하 는 것 이 같은 결과 에 적용 된다 면 표현 식 을 포함 하 는 것 은 표현 식 이 일치 하 는 속성 에 도움 이 되 지 않 습 니 다.
     
     
    <!-- Result fragment -->
    <result type="json">
      <param name="includeProperties">
        ^entries\[\d+\]\.clientNumber,
        ^entries\[\d+\]\.scheduleNumber,
        ^entries\[\d+\]\.createUserId
      </param>
    </result>
    

     
     
    루트 개체 
    "root" 속성 (OGNL 표현 식) 을 사용 하여 직렬 화 에 사용 할 루트 대상 을 지정 합 니 다.
     
    <result type="json">
      <param name="root">
        person.job
      </param>
    </result>
    

     
     
    "root" 속성 (OGNL 표현 식) 은 이 대상 이 null 이 아 닌 지 확인 하기 위해 서 차단기 에 도 사용 할 수 있 습 니 다.
     
    <interceptor-ref name="json">
      <param name="root">bean1.bean2</param>
    </interceptor-ref>
    

     
     
    포장 하 다.
    어떤 이유 가 있 을 수 있 습 니 다. JSON 출력 에 텍스트 로 포장 하고 싶 습 니 다. 주석 패키지 에 접 두 사 를 붙 이거 나 파일 로 업로드 하여 결 과 를 textarea 에 표시 하려 고 합 니 다. wrapPrefix 로 시작 부분 에 내용 을 추가 하고 wrapPostfix 로 끝 에 내용 을 추가 합 니 다. 이 두 매개 변 수 는 우선 사용 합 니 다. "wrap With Comments" 와 "prefix" 는 우선 사용 합 니 다.0.34 이후 추천 하지 않 습 니 다. 예:
    설명 진행:
     
    <result type="json">
      <param name="wrapPrefix">/*</param>
      <param name="wrapSuffix">*/</param>
    </result>
    

     
    접두사 추가:
     
    <result type="json">
      <param name="wrapPrefix">{}&&</param>
    </result>
    

     
     
    패키지 가 업로드 한 파일 내용:
     
    <result type="json">
      <param name="wrapPrefix"><![CDATA[<html><body><textarea>]]></param>
      <param name="wrapSuffix"><![CDATA[</textarea></body></html>]]></param>
    </result>
    

     
    주석 으로 소포
    wrapWithComments 는 0.34 에서 추천 하지 않 습 니 다. wrapPrefix 와 wrapSuffix 를 사용 하 는 것 을 권장 합 니 다.
    wrap With Comments 는 안전 한 JSON 텍스트 를 안전 하지 않 게 만 들 수 있 습 니 다. 예 를 들 어,  ["* / alert ('XSS'); / *"] Douglas Crockford 의 힌트 감사합니다!prefix 를 사용 하 는 것 을 고려 해 야 합 니 다.
    직렬 화 된 JSON 이 {name: 'El Zorro'} 이 라면 출력 은 {} & & ({name: 'El Zorro'} 입 니 다.
    "wrap With Comments" (기본 값 false) 속성 이 true 로 설정 되 어 있 으 면 소포 에 설명 되 어 있 는 JSON 은 다음 과 같 습 니 다.
     
    /* {
       "doubleVal": 10.10,
       "nestedBean": {
          "name": "Mr Bean"
       },
       "list": ["A", 10, 20.20, {
          "firstName": "El Zorro"
       }],
       "array": [10, 20] 
    } */
    

     
     위의 설명 을 취소 하려 면 사용 가능:
     
    var responseObject = eval("("+data.substring(data.indexOf("\/\*")+2, data.lastIndexOf("\*\/"))+")");

     
     
    접두사
     
    prefix 는 0.34 이후 사용 을 권장 하지 않 습 니 다. wrapPrefix 와 wrapSuffix 를 사용 하 십시오.
    인자 prefix 가 true 로 설정 되면 생 성 된 JSON 에 접두사 "{} & & &" 가 붙 습 니 다. 이것 은 납 치 를 방지 하 는 데 도움 이 됩 니 다. 자세 한 내용 은 this Dojo Ticket 을 보십시오.
     
    <result type="json">
      <param name="prefix">true</param>
    </result>
    

      
     
    기본 클래스
     
    기본적으로 "root" 대상 에 정 의 된 기본 클래스 의 속성 은 직렬 화 되 지 않 습 니 다. 모든 기본 클래스 (Object 까지) 의 속성 을 직렬 화 하려 면 JSON result 에 "ignoreHierarchy" 를 false 로 설정 해 야 합 니 다.
     
    <result type="json">
      <param name="ignoreHierarchy">false</param>
    </result>
    

     
    매 거 유형
    기본적으로 Enum 은 name = value 쌍 으로 정렬 되 어 있 습 니 다. 여기 value = name ().
     
    public enum AnEnum {
         ValueA,
         ValueB
      }
    
      JSON:  "myEnum":"ValueA"
    

     
    result 의 인자 인 "enumasbean" 을 사용 하면 Enum 을 하나의 bean 처럼 직렬 화 할 수 있 습 니 다. 특정한 속성 은 name 이 고 값 은 name () 입 니 다. 모든 매개 속성 은 직렬 화 됩 니 다. 
     
     
    public enum AnEnum {
         ValueA("A"),
         ValueB("B");
    
         private String val;
         
         public AnEnum(val) {
            this.val = val;
         }
         public getVal() {
            return val;
         }
       }
    

     
     
    JSON:  myEnum: { "_name": "ValueA", "val": "A" }
    

     
    struts. xml 에서 이 인 자 를 사용 합 니 다:
     
    <result type="json">
      <param name="enumAsBean">true</param>
    </result>
    

     
     
    압축 출력.
    enableGZIP 속성 을 true 로 설정 하면 gzip 압축 응답 출력 을 사용 할 수 있 습 니 다. 요청 후 "Accept - Encoding" 헤더 에 "gzip" 이 포함 되 어야 정상적으로 작 동 할 수 있 습 니 다.
     
    <result type="json">
      <param name="enableGZIP">true</param>
    </result>
    

     
    브 라 우 저 캐 시 응답 데이터 방지
    noCache 를 true (기본 값 false) 로 설정 하면 다음 응답 헤더 가 설 정 됩 니 다.
     
  • Cache-Control: no-cache
  • Expires: 0
  • Pragma: No-cache

  •  
    <result type="json">
      <param name="noCache">true</param>
    </result>
    

     
     
    값 이 null 인 속성 제거
    기본적으로 null 필드 도 직렬 화 되 어 {property name: null} 을 생 성 합 니 다. excludeNull Properties 를 true 로 설정 하여 방지 할 수 있 습 니 다.
     
    <result type="json">
      <param name="excludeNullProperties">true</param>
    </result>
    

     
     
    상태 및 오류 코드
    status 코드 를 사용 하여 응답 상태 코드 를 설정 합 니 다:
     
    <result type="json">
      <param name="statusCode">304</param>
    </result>
    

     
     
    동시에 errorCode 를 사용 하여 오 류 를 보 낼 수 있 습 니 다. (server might end up sending something to the client which is not the serialized JSON):
     
    <result type="json">
      <param name="errorCode">404</param>
    </result>
    

     
    JSONP
    To enable JSONP, set the parameter callbackParameter in either the JSON Result or the Interceptor. A parameter with that name will be read from the request, and it value will be used as the JSONP function. Assuming that a request is made with the parameter "callback"="exec": 
     
    <result type="json">
      <param name="callbackParameter">callback</param>
    </result>
    

     
    And that the serialized JSON is {name: 'El Zorro'}. Then the output will be: exec({name: 'El Zorro'})
    Content Type
    Content type will be set to application/json-rpc by default if SMD is being used, or application/json otherwise. Sometimes it is necessary to set the content type to something else, like when uploading files with Dojo and YUI. Use the contentType parameter in those cases.
     
    <result type="json">
      <param name="contentType">text/html</param>
    </result>  

     
     
    이상 은 선배 "꾀꼬리" 이 문서 에 대한 번역 입 니 다. 선배 님 의 헌신 에 감 사 드 립 니 다. 상기 번역 부분 을 제외 하고 원문 에는 세 가지 구체 적 인 범례 가 있 습 니 다. 일반적인 JSON 호출 을 시범 하 는 것 외 에 JSON RPC 범례 가 있 습 니 다. 필 자 는 잘 모 르 겠 습 니 다. 여기 서 더 이상 말 할 수 없습니다. 원문 주소: https://cwiki.apache.org/confluence/display/WW/JSON+Plugin 관심 있 는 동 화 는 가 볼 수 있 습 니 다.
     
     

    좋은 웹페이지 즐겨찾기