3

Registration_BE には、 のような多くの変数が含まれていますmyvariablereg_beここですべての変数を取得したい。このように、オブジェクトを渡す必要があります。

サーブレット:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be="+reg_be

ウェブサービス:

public String getText(@PathParam("reg_be") Registration_BE reg_be ) {
   System.out.println("websevice:" +reg_be.myvariable);      
    return reg_be.myvariable;
}

上記のコードは、次の例外をスローします。

com.sun.jersey.spi.inject.Errors$ErrorMessagesException.....

どうすればこの問題を解決できますか?

4

2 に答える 2

4

利用できる典型的なオプションは 3 つあります。

オブジェクト変数をリクエストに渡す

これは、多数の変数がない場合や、Registration_BE のフィールドのサブセットのみを入力する機能が必要な場合に役立ちます。

変数を通常の POST としてリクエストに渡したい場合Registration_BEは、最初に複雑なオブジェクトを構築するために何らかの処理を行う必要があります。

public String getText(@RequestParam("reg_be.myvariable") String myvariable) {
   Registration_BE reg_be = new Registration_BE(myvariable);

   System.out.println("websevice:" +reg_be.myvariable);

   return reg_be.myvariable;
}

そして、あなたはそれを呼び出すことができます:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be.myvariable=myvalue

または、代わりに変数の配列を渡すことによって:

public String getText(@RequestParam("reg_be.myvariable") String[] myvariables) {
   Registration_BE reg_be = new Registration_BE(myvariables);

   System.out.println("websevice:" +reg_be.myvariable);

   return reg_be.myvariable;
}

そして、あなたはそれを呼び出すことができます:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be.myvariable=myvalue1&reg_be.myvariable=myvalue2

共通データ交換フォーマットの使用

2 番目のオプションは、登録オブジェクトを JSON (または XML) として渡すことです。このためには、Jackson メッセージ コンバーターを有効にし、 Jackson ライブラリがクラスパスにあることを確認する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven />

</beans>

あなたの方法は変わりません:

public String getText(@RequestParam("reg_be") Registration_BE reg_be ) {

   System.out.println("websevice:" +reg_be.myvariable);

   return reg_be.myvariable;
}

そして、次のように呼び出すことができます:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be={"myvariable":"myvalue"}

カスタム メッセージ コンバーター

3 番目の最も複雑なオプションは、独自のメッセージ コンバーターを作成することです。これにより、最も柔軟性が得られます (リクエストは好きな形式を取ることができます) が、それを機能させるには、より多くのボイラープレート オーバーヘッドが必要になります。

リクエスト パケットの作成方法について非常に具体的な要件がない限り、上記のオプションのいずれかを選択することをお勧めします。

于 2013-06-11T08:11:06.300 に答える
2

オブジェクトを path-param または query-param としてパスしたい場合は、それを文字列として渡す必要があります。このために、オブジェクトを JSON 文字列に変換し、それをクエリ パラメータとして渡します。これは、JSON を使用するより良い方法があります。

もう1つのより良いオプションは、リクエストを作成することPOSTです。POSTオブジェクトをメソッドに送信します。についてはこちらをお読みください@FormParam

于 2013-06-11T07:33:44.517 に答える