6

リクエストをJSONとして送信したいのですが、コントローラーでこのJSONを解析して、必要なパラメーターを取得したいと思います。たとえば、これはリクエストです。

{"param1":"val1"}

このリクエストを解析して「param1」の値を取得したいと思います。request.JSONを使用しましたが、それでもnullになりました。これを解決する他の方法はありますか?

ありがとう、

4

3 に答える 3

4

次のいずれかを使用して、コンテンツをテストできます(どちらのオプションも、最終的には自動テストとして再利用できます-ユニットと統合)。

次のようなコントローラーの単体テストを作成します(サーバーを起動する必要はありません)。

void testConsume() {
     request.json = '{param1: "val1"}'
 controller.consume()       
 assert response.text == "val1"
}

そして、controller.consume()が次のようなことをするとしましょう:

def consume() {
    render request.JSON.param1
}

または、たとえば、Jersey Clientを使用して、今回デプロイされたコントローラーに対して呼び出しを行うことができます。

public void testRequest() {
    // init the client
    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);

    // create a resource
WebResource service = client.resource(UriBuilder.fromUri("your request url").build());
    // set content type and do a POST, which will accept a text/plain response as well
    service.type(MediaType.APPLICATION_JSON).accept(MediaType.TEXT_PLAIN).put(Foo.class, foo);
}

、ここでfooは次のようなFooです。

@XmlRootElement
public class Foo {
    @XmlElement(name = "param1")
    String param1;

    public Foo(String val){param1 = val;}      
}

さまざまなRESTリクエストにJerseyクライアントを使用する方法の例を次に示します 。https ://github.com/tavibolog/TodaySoftMag/blob/master/src/test/java/com/todaysoftmag/examples/rest/BookServiceTest.java

于 2012-11-07T23:12:49.067 に答える
3

次のようにUrlMappingsに設定します。

static mappings = {
    "/rest/myAction" (controller: "myController", action: "myAction", parseRequest: true)
}

最新のGrailsガイドでparseRequestを検索してください。

次に、curlで正しく機能するかどうかを検証します。

curl --data '{"param1":"value1"}' --header "Content-Type: application/json" http://yourhost:8080/rest/myAction
于 2012-11-07T13:08:59.987 に答える
0

コントローラ方式では、をチェックしてくださいrequest.format。を指定する必要がありますjson。ここにはないのではないかと思いますが、ペイロードがどのように解釈されているかについての手がかりが得られるかもしれません。

Config.groovyファイルで、次の値を設定します。

grails.mime.file.extensions = false
grails.mime.use.accept.header = false

その同じファイルで、を確認してくださいgrails.mime.types。含まれていることを確認して ください。json: ['application/json', 'text/json']おそらく含まれますが、上に配置して*/*ください。これらのエントリは順番に評価されます(これは2.1より前のバージョンでは当てはまり、現在は確認されていませんが、一体何なのか)。これに関連して、aiolosが述べたように、content-typeヘッダーを上記のmimeタイプのいずれかに設定します。

最後に、TomaszKalkosińskiに従ってcurlでテストするか、RESTClient for FFを使用するには、クライアントページの最上部にある[ヘッダー]をクリックします(左上に4つのクリック可能なアイテムがあります。ヘッダーは1つです。新しいものからRESTClient、「カスタムヘッダー」を選択する必要があるかもしれません。思い出せません)

于 2012-11-07T17:37:23.757 に答える