0

gwt 2.5 と Jersey 1.17 および RestyGWT 1.3

私が電話するとき

次のエラーが表示されます。

応答を解析できませんでした: org.fusesource.restygwt.client.ResponseFormatException: 応答は有効な JSON ドキュメントではありませんでした

私のリソースクラス:

@Path("/person")
public class PersonResource {

    private static int counter = 1;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("/hello")
    public String sayHello(){
        return "Hallo, Seryoga";
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Person getPersons() {

        List<Person> persons = new ArrayList<Person>();
        for (int i = 0; i < 5; i++) {
            persons.add(new Person(counter, "name-" + counter, new Date()));
            counter++;
        }

        return persons.get(0);
    }
}

クライアント インターフェイス

public interface PersonResourceAsync extends RestService {

    @GET
    void getPersons(MethodCallback<Person> callback);

    /**
     * Utility class to get the instance of the Rest Service
     */
    public static final class Util {

        private static PersonResourceAsync instance;

        public static final PersonResourceAsync get() {
            if (instance == null) {
                instance = GWT.create(PersonResourceAsync.class);
                ((RestServiceProxy) instance).setResource(new Resource(
                        GWT.getHostPageBaseURL()+"rest/person"));
            }
            return instance;
        }

        private Util() {

        }
    }
}

personクラスにはID名などのゲッター/セッターがあり、シリアライズ可能で@XmlRootElement

私のweb.xmlには以下が含まれています:

<servlet>
        <servlet-name>RestServlet</servlet-name>
        <display-name>Rest Servlet</display-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>digitronic.ems.server.filebrowser</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>

        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

そしてprojekt.gwt.xmlで:

<!-- RestyGWT -->
<inherits name='org.fusesource.restygwt.RestyGWT' />

http:/localhost:8080/Projekt/rest/person 経由で呼び出すと、json 構文で値が取得されますが、restygwt 経由で onError が呼び出され、理由がわかりません。

誰かが私を助けることができますか?

4

2 に答える 2

4

デフォルトでエンコード/デコードされる日付オブジェクトのエントリポイント クラスに次のコードを設定する必要があります。

static {
        Defaults.setDateFormat(null);
    }
于 2014-03-25T12:55:45.527 に答える
3

私は同様の設定をしていますが、私の側の問題は、Date オブジェクトが正しく転送されなかったことです。Date オブジェクト用のアダプターを追加しました。Person クラスがある同じパッケージに 2 つのファイルを入れるだけです。

public class MyJaxbDateAdapter extends XmlAdapter<String,Date>{
//standard jaxb/resty ISO8601 date format
public static final String DATEFORMAT="yyyy-MM-dd'T'HH:mm:ss.SSSZ";

public MyJaxbDateAdapter(){}

public Date unmarshal(String s)    throws Exception    {
    if(s==null || s.length()==0){
        return null;
    }
    return new SimpleDateFormat(DATEFORMAT, Locale.GERMANY).parse(s);
}

public String marshal(Date d)     throws Exception     {
    if(d==null) {
        return "";
    }
    return new SimpleDateFormat(DATEFORMAT, Locale.GERMANY).format(d);
}
}

およびファイル package-info.java:

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters
    ({
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=MyJaxbDateAdapter.class,type= java.util.Date.class)

    })
package de.company.app;

これで問題が解決しない場合は、Person クラスのコードを追加してください。

于 2013-07-09T07:29:20.780 に答える