1

Spring MVCを使用してRESTサービスを実装したいのですが、次のオブジェクトをURLで渡します"/url/lookup/{jsonparm}"

{"url":"http://bubba.com/foo/bar", "max_hops":3}

私は次のことを試しました:

@RequestMapping(value = "/url/lookup/{jsonparam}", method = RequestMethod.GET)
@ResponseBody
public String urlLookup(@PathVariable("jsonparam") String jsonparam) {
    // just to see if I can get the parms
    logger.debug("urlLookup get request : " + jsonparam.toString()); 
    JSONObject resp = new JSONObject();
    return resp.toString(); // return an empty JSONObject for now
}

だから私はこれを呼び出すことによって呼び出す

http://localhost:8080/v1/wsp/url/lookup/%7B%22max_hops%22%3A3%2C%22url%22%3A%22http%3A%2F%2Fbubba.com%2Ffoo%2Fbar%22%7D

運が悪いので、私の桟橋のログで次のことを確認してください。

WARNING: No mapping found for HTTP request with URI [/v1/wsp/url/lookup/{"max_hops":3,"url":"http://bubba.com/foo/bar"}] in DispatcherServlet with name 'rest'

ノート:

  1. URLプレフィックスlocalhost:8080/v1/wsp/が正しく、サーブレットとリクエストマッピングも正しい
  2. @PathVariable回答者の提案の1つとしてを使用するように質問を更新しました

ありがとう。

4

2 に答える 2

3

あなたは混乱しているGETPOST方法です。

また:

  1. メソッドを使用POSTして、実際にJSONコンテンツをコントローラーに投稿します。これは、任意のRESTクライアントを使用してデバッグできます。Chrome用のAdvancedRestClient 。
  2. GET(現在のように)メソッドを使用します。ただし、JSON値を。という実際のパラメーターとして渡す必要がありますjsonparam。したがって、例は次のように変更する必要があります。

     http://localhost:8080/v1/wsp/url/lookup/jsonparam=%7B%22max_hops%22%3A3%2C%22url%22%3A%22http%3A%2F%2Fbubba.com%2Ffoo%2Fbar%22%7D
    

後者はあまり一般的ではありません。


編集:

URLをもう一度見てみると、2つのSpringアノテーションを混同しているのではないかと思います。

  1. @PathVariable("jsonparam")と:
  2. @RequestParam("jsonparam")

@RequestParamURLがの必要性を示しているときに使用しています@PathVariable

Edit2:

ただし、ここで読むことができるように:http ://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templatesパス変数任意の単純なタイプの値を渡すことができます。JSONはそれらの1つではないので、問題があると思います。

POSTJSON値の交換に使用することを強くお勧めします。ただし、それがオプションでない場合は、パラメーター値にアクセスし、上記の修正された例のようにJSON値を渡すために、GETメソッドを使用することをお勧めします。@RequestParam

于 2013-01-14T03:22:46.943 に答える
1

@RequestParamの代わりに@PathVariableを使用する必要があります。

public String urlLookup(@PathVariable("jsonparam") String jsonparam){
}

@RequestMapping(value = "/ url / lookup / {jasonparam} "があるため

また、@RequestMapping値にタイプミスがあります。{jasonparam}ではなく/url/ lookup/ {jsonparam}にする必要があります

于 2013-01-14T03:30:19.330 に答える