RESTのwebサービスを受けポストを使用Restlet-最良の実践例
-
22-07-2019 - |
質問
いった資源およびその代表的なオーバーライド方式を扱う郵便ます。
public void acceptRepresentation(Representation rep) {
if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
//Do stuff here
}
else {
//complain!
}
}
私が知りたいでにベストプラクティスを取り扱ったパケットの形式をサポートしています。いただけ多くの事例を使ってものはあるのではないでしょうかを作品に表現オブジェクトそのものはキャストするのに有益なXMLオブジェクト???
手でもかまい解析の着信をXMLに資源をよろしくお願いいたします。
解決
このような対応がいっぱいになりました。感謝 Thierry Boileau の答え:
利用できる二種類の"XML 表現":DomRepresentation とSaxRepresentation.ができ インスタンスを生成し、 掲載して表現。E.g.:DomRepresentation xmlRep=new DomRepresentation(rep);
のDomRepresentationア のDom document.の SaxRepresentationできる解析 XMLのdocフレーバを自分の "contentHandler.のjavadocsこちら 1ここでは2.
他のヒント
現在、JAX-RSの代替実装であるRESTeasyを使用してこれを行っています。 JAXBバインディング(注釈)を使用してXMLとモデルPOJOをマッピングし、JAX-RSに JAXBプロバイダーを指定して、方法を認識します。これは、 RESTfulで説明されています。 RESTEasyを使用したJava EEのWebサービス(JAX-RS)の記事(役立つかもしれません)。
更新:Restletの場合、 JAXB拡張機能が必要な場合があります。
representation.getText()
メソッドを使用して、SAXパーサーまたはdomリーダーにフィードできるストリングを取得できます。
@Simon E
わかりません:JavaのどのREST実装を使用していますか?
それで、JAX-RS(ジャージー実装)の使用例を紹介します
サーバー部分(一部のRESTクラスのメソッド):
@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
@FormParam("name") String name,
@FormParam("content") String content)
throws Exception {
// NOTE: you get your content as String
// (do something here)
return Response.ok().build();
}
クライアント部分(JUnitテストの方法):
@Test
public void uploadFile()
throws Exception {
String address = "http://0.0.0.0:8000/r/upload";
WebResource r = Client.create().resource(address);
Form form = new Form();
form.add("name", "test");
form.add("content", "SOME CONTENT GOES HERE");
String s = r.post(String.class, form);
System.out.println(s);
}
それだけです!!!
インポートに問題がある場合:
サーバーにはjavax.ws.rs。*およびjavax.ws.rs.core。*が必要です
クライアントにはcom.sun.jersey.api.client。*が必要です。
com.sun.jersey.api.representation。*
とにかく、JAX-RSを使用するよりも、 代替実装。JAX-RSは 今後の Java EE 6
restlet 2.0でも同じ手順ですか?
restlet 2.0m6を使用しています。使用するコードスニペットは次のとおりです-
@Post
公開表現プロセス(表現エンティティ)
{
試用
{
DomRepresentation dom = new DomRepresentation(entity);
ドキュメントd = dom.getDocument();
。
。
} catch(Exception e)
{e.printStackTrace(); }
そしてdom.getDocument()行でNull Pointer例外をスローします。つまり、実際にはデータが到着していません。
そして、私のフレックスビットは次のようになります-var service:HTTPService = new HTTPService(); service.method =" POST&quot ;; service.contentType =" application / xml" service.url = url; var token:AsyncToken = service.send(params);
paramsはXMLオブジェクトです。