RestyGWT和jerseyResponse不是有效的JSON文档

时间:2013-07-08 15:52:18

标签: gwt jersey jax-rs tomcat6

gwt 2.5,泽西岛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名称的getter / setter等可序列化和@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我调用了错误,我不知道为什么。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

您需要在入口点类中为默认编码/解码的日期对象设置以下代码。

static {
        Defaults.setDateFormat(null);
    }

答案 1 :(得分:3)

我有类似的设置,在我这边的问题是Date对象没有被正确传输。我为Date对象添加了一个适配器。 只需将两个文件放在Person类所在的同一个包中:

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类添加代码。