0

JSON 経由でフォーム エントリを別のクライアント リソースに送信すると、415 エラーが発生します。以下のコードのターゲット URI ("/message") は、フォームを使用していない場合 (つまり、テスト モック オブジェクトで "/message" をヒット) に機能します。

フォームの値を取得し、ターゲット リソースに投稿するコードを次に示します。やらなければならないことがありませんか?

私は以下を使用しています:

  • レストレット: 2.1 RC5
  • GAE: 1.6.1

フォームレストレット:

@Post
public void handlePost(Representation entity) {

    final Form webForm = new Form(entity);
    MessageEntity newMessage = new MessageEntity();

    String subject = webForm.getFirstValue("subject");
    String sendto = webForm.getFirstValue("email");
    String message = webForm.getFirstValue("message");

    newMessage.setCategoryID(subject);
    newMessage.setAccountID(sendto);
    newMessage.setMessageText(message);

    ClientResource cr = new ClientResource(getRootRef()+ "/message");
    cr.post(newMessage, MediaType.APPLICATION_JSON);
}

ターゲット リソース (「/メッセージ」)

   @Post("json")
   public void HandleRequest(MessageEntity messageEntity) {

   // Logic here

   }

さらに情報が必要な場合はお知らせください

ありがとう!

4

1 に答える 1

1

私はあなたのものと非常によく似たコードを持っています。同様のバージョンの Restlet と GAE も実行しています。最初の質問は、順序が重要になる場合があるため、ターゲット リソースに他の @Post メソッドがあるかどうかです。

これが私がその仕事をしているコードの2つのバージョンです.... 1)

public Representation postHandler() {    
  Reference commitsRef = new Reference(Consts.RESOURCE_BASE + "commitments/");    
  ClientResource commitsResource = new ClientResource(getContext(), commitsRef);
  ....
  Representation commitsRep = commitsResource.post(commitForm);

@Post("json") と @Post("form") の両方を処理するターゲット リソースにフォームを投稿しています。

2)

public Representation doPostFromGet() {   
  Reference takeActRef = new Reference(Consts.RESOURCE_BASE + "commitment/"
      + commitmentId + "/userActs/");     
  ClientResource takeActResource = new ClientResource(getContext(), takeActRef);
  ...
  Representation takeActRep = takeActResource.post(newAct);

それは、私が「Peierls マジック」と呼んでいるものを使用するフォームに Java オブジェクトをポストすることです。http://tembrel.blogspot.com/2012/03/converting-forms-in-restlet-to-pojos.htmlを参照 してください。これにより、ターゲットに 1 つの post() を含めることができ、フォームと pojo の両方を受け入れることができます。

些細なことですが、新しいメッセージを追加するために投稿する場合、URL は "/messages/" (複数形) にする必要があります。おそらくどこかにタイプミスがあるのでしょうか? (ありそうもない可能性ですが、私はそれについて言及すると思いました)。

幸運を、

RB

于 2012-06-09T23:36:16.590 に答える