java - RESTful Java Web 服务中的 POST 方法问题

标签 java rest jaxb jersey

我正在尝试创建一个实现所有四个 CRUD 操作的 RESTful Web 服务。我陷入了“创建”,因为不知何故我无法获得发布的数据。这是我写的方法。作为一个信息,我正在使用 JAX-RS + JAXB XML 的 Jersey RI 来序列化对象。

这里是:

@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; }

}

有人可以给我一些启发吗?我用尽了每一个想法来使它起作用,但没有任何效果!

提前致谢。

最佳答案

我认为您的问题是您使用 toString() 方法获取 InputStream 的字符串的行:

String xml = is.toString();

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

关于java - RESTful Java Web 服务中的 POST 方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101885/

相关文章:

java - 如何在不知道其名称的情况下调用实现某个接口(interface)的类?

java - Java 的双向可扩展层次结构

Python .get 嵌套 Json 值

java - JAXB 将属性添加到简单数据类型的 XmlElement

java - EclipseLink MOXy 动态对象图中的 ALLOW_UNQUOTED_FIELD_NAMES JSON

javax.xml.bind.UnmarshalException : unexpected element. 预期的元素是(无)

java - eclipse 调试器可以跟随新生成的线程吗

java - Java 中的可选条件运算符导致 NullPointerException

rest - 如何使用 Jenkins REST API 发布更新的 config.xml?

rest - 有人有 "Well Defined"REST Web 服务的示例吗?