0

以下は、RESTful Web サービスで使用するコードのスニペットです。create(Employee entity) メソッドに JSON データを送信しています。サーブレット リクエストからその JSON データを取得したいと考えています。

私が使用した System.out.println(..)メソッドが出力されます。これは、 stringBufferが NULL ではないことを意味します。それでも、「:」文字の後に何も出力されません [glassfish ロガーでこれをチェックしています]。さらに、POST されたエンティティはデータベースに正しく永続化されています。

これに関連する多くの質問を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

}

あなたの洞察に感謝します。

4

2 に答える 2

2

サーバーは、自動的に Employee エンティティに逆シリアル化するために、要求本文を既に使用しています。同じ入力ストリームを再度読み取ることはできません。

于 2012-12-14T00:28:19.807 に答える
0

POST で使用される「エンティティ」に文字列バッファの値を設定する必要があります。

jersey /glassfish POST のテストまたはサンプルを確認してください。

POST.entity は、POST の本文に必要な値を期待しています。

于 2012-12-14T00:23:02.220 に答える