33

私のリクエストをモデル化するクラスがあります。

class Venue {
    private String city;
    private String place;

    // Respective getters and setters.
}

また、会場に関する情報を取得するための RESTful URL をサポートしたいと考えています。だから私はこのようなコントローラーメソッドを持っています。

@RequestMapping(value = "/venue/{city}/{place}", method = "GET")
public String getVenueDetails(@PathVariable("city") String city, @PathVariable("place") String place, Model model) {
    // code
}

すべての個々のパラメーターを取得する代わりに、春にパス変数をモデル オブジェクト (この場合は Venue) にバインドする方法はありますか?

4

3 に答える 3

43

Spring MVCリクエストパラメーターとパス変数をJavaBeanにバインドする機能を提供します。あなたの場合はVenue. 例えば:

@RequestMapping(value = "/venue/{city}/{place}", method = "GET")
public String getVenueDetails(Venue venue, Model model) {
    // venue object will be automatically populated with city and place
}

JavaBean が機能するにはcityplaceプロパティが必要であることに注意してください。

詳細については、spring-projects/spring-mvc-showcase の withParamGroup() の例をご覧ください。

于 2014-04-24T04:37:40.757 に答える
3

インターフェイスの実装を提供できHandlerMethodArgumentResolverます。このインターフェースは主に、Spring ができない方法でコントローラーメソッドへの引数を解決するために使用されます (これは本質的にあなたがやろうとしていることです)。これを実現するには、次の 2 つの方法を実装します。

public boolean supportsParameter(MethodParameter mp) {
    ...
}

public Object resolveArgument(mp, mavc, nwr, wdbf) throws Exception {
    ...
}

次の方法で、Spring コンテキストに実装を挿入できます。

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean class="com.path.ImplementationOfHandlerMethodArgumentResolver"/>
    </mvc:argument-resolvers>
</mvc:annotation-driven>

Spring が解決できないパラメーターに遭遇すると、メソッドsupportsParameter()を呼び出して、リゾルバーがパラメーターを解決できるかどうかを確認します。メソッドが true を返す場合、Spring はメソッドを呼び出してresolveArgument()実際にパラメーターを解決します。このメソッドでは、contextPath を超えるパスを取得するために使用できる NativeWebRequest オブジェクトにアクセスできます。(あなたの場合は次のようになります/venue/{city}/{place}:) リクエスト パスを解析し、都市/場所の文字列を取得して、会場オブジェクトに入力することができます。

于 2013-08-14T03:07:58.740 に答える