2010-11-04 95 views
2

我试图做一个RESTful Web服务来实现所有四个CRUD操作。我被困在“创建”中,因为我无法获取发布的数据。这是我写的方法。就像一个信息,我使用JAX-RS + JAXB XML的Jersey RI来序列化对象。REST风格的Java Web服务中POST方法的问题

这就是:

@POST 
@Consumes("application/xml") 
public Response createStudent(InputStream is) { 
Student st = this.readStudent(is); 
st.setUserId(idCounter.incrementAndGet()); 
studentDB.put(st.getUserId(), st); 
System.out.println("Created student " + st.getUserId()); 
return Response.created(URI.create("/student/"+ st.getUserId())).build(); 

} 

而且readStudent方法如下:

protected Student readStudent(InputStream is){ 

JAXBContext ctx; 

Student st = null; 
try { 
    String xml = is.toString(); 
    System.out.println(xml); 
    ctx = JAXBContext.newInstance(Student.class); 
    st = (Student) ctx.createUnmarshaller().unmarshal(new StringReader(xml)); 
    return st; 
} catch (JAXBException e){ 
    e.printStackTrace(); 
} 
finally { return st; } 

} 

有人可以给我一些有关此轻?我用尽了每一个想法,使这个作品,没有任何工作!

在此先感谢。

回答

0

经过出汗努力寻找答案,我已经设法修复它!这只是对resteasy-jaxb-provider.jar的缺失依赖。如果没有这个.jar,Servlet无法自动从POJO转换为XML,反之亦然

2

我觉得你的问题是在你使用toString()方法来获取InputStream的串线:

String xml = is.toString(); 

你应该输入流中读取数据并将其追加到一个新的字符串。 toString()是流的字符串表示,但不是它的内容。您必须使用InputStreamread方法,并使用StringBuilderStringWriter将字节附加到新的String

0

我不明白你为什么没有createStudent(Student student)。 jsr311的整个想法是参数也被解析并赋予函数。

编辑 一秒钟我以为我是混淆的东西。但我发现一个例子这里http://blogs.oracle.com/enterprisetechtips/entry/configuring_json_for_restful_web

@PUT 
     @Consumes("application/json") 
     public synchronized void setStatus(StatusInfoBean status) { 
      ... 
     } 

所以,你甚至都不需要解析XML或JSON。这项工作已经完成了你

+0

嗯,尝试并在尝试卷曲URI时收到此消息: 找不到类型的消息正文阅读器:内容类型为com.esconn.domain.Student的类:application/xml – 2010-11-04 23:42:36