2016-07-20 2 views
2

현재 자바 웹 응용 프로그램에서 JSON 플러그인 (https://struts.apache.org/docs/json-plugin.html)을 구성해야합니다. 내가 한 짓 :속성 setData [JSON + Struts2 plugin]의 호환되지 않는 유형

1) pom.xml 파일에 플러그인의 모든 종속성을 추가했습니다.

<dependency> 
    <groupId>org.apache.struts</groupId> 
    <artifactId>struts2-json-plugin</artifactId> 
    <version>2.3.24.1</version> 
</dependency> 

2) 내 행동에 JSON

<action name="myMainAction" 
    class="org.com.action.myMainAction"> 
     <interceptor-ref name="json"> 
      <param name="enableSMD">true</param> 
     </interceptor-ref> 
     <result type="json">      
     </result>   
    <param name="requiredAuthorities">F_ADD</param> 
</action> 

4) 생성 된 모델의 인터셉터와 결과 유형을 추가 json-default

<package name="my-test-package" extends="xxx, json-default" 
    namespace="/my-test-package"> 

3)과 struts.xml에서 패키지를 확장 클래스 Marriage에만 setter/getters가 있습니다.

5)는 JSON 개체를 만든 다음 코드

private List <Marriage> data; 

public List<Marriage> getData() { 
    return data; 
} 
public void setData(List<Marriage> data) { 
    System.out.println("Inside the setter "); 
    this.data = data; 
} 


@Override 
public String execute() throws Exception { 

    System.out.println(data.get(0).getLastNameHe()); 

    return SUCCESS; 
} 

6)와 myMainAction으로 명명 작업 클래스를 생성하여 서버에 ajax 통해 통과시켰다. Google 크롬 콘솔을 통해 데이터를 보내고 JSON 개체를 구문 분석하고 모든 데이터가 거기에 있다는 것을 알 수 있습니다. ,

Exception occurred during processing request: Incompatible types for property setData (CommonsLogger.java [qtp1144623021-22]) org.apache.struts2.json.JSONException: Incompatible types for property setData

가 일부 올바른 방향으로 날 지점 시겠어요 그것은 내가 일하고 있어요 거의 둘째 날하지만 그렇지 않습니다 : 그러나, 내 이클립스 또한 크롬 콘솔에서 예외가 발생하지 일하기 시작하는 것 같습니다.

EDIT1 : 자바 측으로 전송되는 데이터이며 Chrome 콘솔을 통해 볼 수 있습니다.

{"data":{"recordId":"123","registrationDate":"20-07-2016","hisId":"","herId":"","lastNameHe":"Asd","firstNameHe":"Asd","middleNameHe":"Asd","workPlaceHe":"","educationHe"}} 

이것은 JSON.stringify -ed 이후의 개체입니다. 여러분이 볼 수 있듯이 변수는 루트 data이며, 나머지 모든 데이터는 그 밑으로 가게됩니다. 내 논리에 따르면 티는 내 Java 클래스에서 데이터의 setter을 찾고 해당 클래스의 setters/getters를 호출해야합니다. P.S 클래스 이름 등의 이름을 변경하여 이름 지정 규칙에 대해 걱정할 필요가 없습니다.) 제작 코드에서 올바른 것이 있습니다.

EDIT2 : 내 실수 @AleksandrM에 지적

감사합니다. 나는 그것이 stringdate에 그리고 수를 설정하려고 알고있는 것처럼

private Date registrationDate; 
    public Date getRegistrationDate() { 
    return registrationDate; 
} 

public void setRegistrationDate(Date registrationDate) { 
    this.registrationDate = registrationDate; 

:

Unparseable date: "20-07-2016" (CommonsLogger.java [qtp212900572-17]) java.text.ParseException: Unparseable date: "20-07-2016"

이 부분에 대한 json 변수가 registrationDate이며, JAVA의 구현 : 이제 그것은 매우 이상한 오류가 발생합니다 그럴 수 없어. json-plugin이 변환 할 수없는 이유는 무엇입니까? 옵션/설정에 무엇을 써야합니까?

+0

json 인터셉터 대신 defaultStack과 json 인터셉터를 사용할 경우 작동합니까? Marriage에는 기본 no-args 생성자가 있습니까 (또는 생성자 없음)? P.S : alowcase 문자로 시작하는 자바 클래스가 좋지 않다. –

+0

'defaultStack' +'json' 인터셉터를 사용해야한다. 제출할 데이터를 표시하십시오. –

+0

@AndreaLigios, 나는 그것이 defaultStack의 문제 또는 스트럿츠의 인터셉터 위치라고 생각하지 않습니다. 그리고 내 Marraige 클래스에는 생성자가 없습니다. 그 Marraige 클래스는 최대 절전 모드와 연결되어 db 테이블 등을 만들고, 그 클래스의 목적은 단지 그것을 설명하는 순수한 모델 일뿐입니다. – Daler

답변

2

자바 코드에 List<Marriage> data이 필요하지만 JSON 개체에는 배열이 없습니다. Java 코드를 Marriage data으로 변경하거나 JSON에 개체 배열을 게시하십시오.

액션에 대해 json 외에 다른 인터셉터를 정의 할 수도 있습니다. 사용자 정의 인터셉터 스택을 생성하고 작업 구성에서이를 참조하십시오. (yyyy-MM-dd'T'HH:mm:ss 인) 또는 사용자 정의 Struts type converter을 만들 Date 객체 변환 용 기본 형식으로 날짜 문자열에 대한

<interceptor-stack name="json-stack"> 
    <interceptor-ref name="json" /> 
    <interceptor-ref name="defaultStack" /> 
</interceptor-stack> 

. 또는 설정자에서 @JSON(format = "dd.MM.yyyy")을 사용하십시오.

this follow up question을 참조하십시오.

+0

완전성을 위해 2.3.24.1을 사용하는 동안 기본 형식 (날짜 만 RFC3339) [2.3.28에서 사용할 수 있음] (https://issues.apache.org/jira/browse/WW-4551)이 강제되므로 변환기를 찾으러 갈 때 –

+0

@AndreaLigios \t json과 형식 변환에 관한 부분이 잘못된 것처럼 보입니다. 그것을 바꾸려고합니다. –

+0

@AndreaLigios, 기본 형식 날짜에 대해 읽었습니다. 패치는 알고 있지만 업 그레 이드 할 수 없습니다. 큰 프레임 워크를 사용하고 별도의 모듈을 개발 중이기 때문에 업그레이드 할 수 없습니다. 원하지 않습니다. 또 다른 틀 문제를 다루겠습니다. – Daler