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我调用了错误,我不知道为什么。
有人可以帮助我吗?
答案 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类添加代码。