以下是我在RESTful Web服务中使用的代码片段。我正在向 create(Employee entity)方法发送JSON数据。我想从servlet请求中获取JSON数据。
我使用的System.out.println(..)方法被打印,这意味着 stringBuffer 不是NULL;但是在“:”字符之后没有任何内容被打印[我在glassfish记录器中检查这个]。除此之外,POSTed enitity正在持久地保存到数据库。
我已经在stackoverflow和其他网站上搜索了与此相关的许多问题,但到目前为止我没有尝试过任何工作。
public class EmployeeFacadeREST extends AbstractFacade<Employee> {
@Context private HttpServletRequest servletRequest;
@PersistenceContext(unitName = "EmployeePU")
private EntityManager em;
public EmployeeFacadeREST() {
super(Employee.class);
}
@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create( Employee entity) {
StringBuffer stringBuffer = null;
try{
InputStream body = servletRequest.getInputStream();
stringBuffer = new StringBuffer();
int d;
while((d = body.read()) != -1){
stringBuffer.append((char)d);
}
}
catch(IOException e){
}
if(stringBuffer != null){
System.out.println("the entity is: " + stringBuffer.toString()); // this line gets printed
}
super.create(entity);
}
// more code
}
非常感谢您的见解。
答案 0 :(得分:2)
服务器已经使用了请求主体,以便自动将其反序列化为Employee实体。您无法再次读取相同的输入流。
答案 1 :(得分:0)
您需要将POST使用的'entity'设置为stringbuffer的值。
检查球衣/玻璃鱼POST的测试或样品。
POST.entity期望在POST正文中你想要的值。